比赛 |
20150424 |
评测结果 |
AAAAAAAAAA |
题目名称 |
物质起源 |
最终得分 |
100 |
用户昵称 |
Satoshi |
运行时间 |
0.013 s |
代码语言 |
C++ |
内存使用 |
0.36 MiB |
提交时间 |
2015-04-24 10:21:14 |
显示代码纯文本
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <map>
using namespace std;
ifstream in("origin.in");
ofstream out("origin.out");
int n,m;
string s[401],linshi;
vector<string> l[401];
vector<string> r[401];
vector<int> q[401];
vector<int> p[401];
map<string,int>F,G;
vector<string> star,ans;
string d[501];
bool f[16001]={0},g[16001]={0};
int main()
{
int i,j,k,count=0;
bool flag=1,flag2=1;
in>>n;
for(i=1;i<=n;i++)
{
in>>s[i];
flag=1;
q[i].push_back(-1);
for(j=0;j<s[i].size();j++)
{
if(flag)if(s[i][j]=='+')q[i].push_back(j);
if(!flag)if(s[i][j]=='+')p[i].push_back(j);
if(s[i][j]=='=')
{
q[i].push_back(j);
flag=0;
p[i].push_back(j);
}
}
p[i].push_back(s[i].size());
}
count=0;
for(i=1;i<=n;i++)
{
for(j=0;j<q[i].size()-1;j++)
{
int x,y;
x=q[i][j]+1;
y=q[i][j+1]-q[i][j]-1;
linshi=s[i].substr(x,y);
l[i].push_back(linshi);
if(!F[linshi])
{
count++;
F[linshi]=count;
}
}
}
for(i=1;i<=n;i++)
{
for(j=0;j<p[i].size()-1;j++)
{
int x,y;
x=p[i][j]+1;
y=p[i][j+1]-p[i][j]-1;
linshi=s[i].substr(x,y);
r[i].push_back(linshi);
if(!F[linshi])
{
count++;
F[linshi]=count;
}
}
}
in>>m;
for(i=1;i<=m;i++)
{
in>>d[i];
int cnt=F[d[i]];
if(!cnt)continue;
else f[cnt]=1;
}
for(k=1;k<=10000;k++)
{
if(!flag2)break;
flag2=0;
for(i=1;i<=n;i++)
{
if(!g[i])
{
flag=1;
for(j=0;j<l[i].size();j++)
{
int cnt=F[l[i][j]];
if(!f[cnt])
{
flag=0;
break;
}
}
if(flag)
{
for(j=0;j<r[i].size();j++)
{
int cnt=F[r[i][j]];
if(!f[cnt])
{
f[cnt]=1;
flag2=1;
ans.push_back(r[i][j]);
}
}
g[i]=1;
}
}
}
}
out<<ans.size()<<endl;
sort(ans.begin(),ans.end());
for(i=0;i<ans.size();i++)out<<ans[i]<<endl;
return 0;
}