记录编号 160148 评测结果 AAAAAAAAAA
题目名称 物质起源 最终得分 100
用户昵称 GravatarSatoshi 是否通过 通过
代码语言 C++ 运行时间 0.014 s
提交时间 2015-04-24 12:05:38 内存使用 0.36 MiB
显示代码纯文本
#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;
}