记录编号 | 160167 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 物质起源 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | 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; }