记录编号 160167 评测结果 AAAAAAAAAA
题目名称 物质起源 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.022 s
提交时间 2015-04-24 12:36:00 内存使用 0.38 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<string>
#include<map>
#include<set>
#include<deque>
using namespace std;
string a[401];
int n,m,ans=0;
map<string,int> mp;
set<string> s;
set<string>::iterator it;
class miku
{
public:
	int d,f;
	string b[21];
	string c[21];
	miku()
	{
		d=f=0;
	}
}q[401];
int main()
{
	freopen("origin.in","r",stdin);
	freopen("origin.out","w",stdout);
	scanf("%d%d",&n);
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		int tot=1,ok=0;
		for(int j=0;j<a[i].length();j++)
		{
			if(ok==0)
			{
			if(a[i][j]=='+')
			{
				mp[q[i].b[tot]]=0;
				q[i].d=tot;
				tot++;
			}
			else if(a[i][j]=='=')
			{
				mp[q[i].b[tot]]=0;
				q[i].d=tot;
				tot=1;
				ok=1;
			}
			else
			{
			q[i].b[tot]+=a[i][j];
			//cout<<q[i].b[tot]<<" "<<i<<" "<<tot<<endl;
			}
			}
			else
			{
				if(a[i][j]=='+')
				{
					mp[q[i].c[tot]]=0;
					q[i].f=tot;
					tot++;
				}
				else
			    q[i].c[tot]+=a[i][j];
				if(j==a[i].length()-1)
				{
					mp[q[i].c[tot]]=0;
					q[i].f=tot;
				}
			}
		}
	}
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		string b;
		cin>>b;
		mp[b]=1;
	}
	bool flag=1;
	deque<int> p;
	for(int i=1;i<=n;i++)
		p.push_back(i);
	while(flag)
	{
		flag=0;
		int t=p.size();
		while(t>0)
		{
			int i=p.front();
			p.pop_front();
			//cout<<t<<endl;
			bool ok=0;
			for(int j=1;j<=q[i].d;j++)
			{
				//cout<<q[i].b[j]<<" "<<mp[q[i].b[j]]<<" "<<i<<" "<<j<<" "<<q[i].d<<" "<<endl;
				if(mp[q[i].b[j]]==0)
				{
					ok=1;
					break;
				}
			}
			//cout<<endl;
			if(ok==0)
			{
				flag=1;
				for(int j=1;j<=q[i].f;j++)
			    {
					if(mp[q[i].c[j]]==0)
					{
					mp[q[i].c[j]]=2;
					//cout<<q[i].c[j]<<endl;
					ans++;
					s.insert(q[i].c[j]);
					}
				}
			}
			else
				p.push_back(i);
			t--;
		}
	}
	printf("%d\n",ans);
	for(it=s.begin();it!=s.end();it++)
	{
		cout<<*it<<endl;
	}
	return 0;
}