比赛 20150424 评测结果 AAAAAAAAAA
题目名称 物质起源 最终得分 100
用户昵称 Chenyao2333 运行时间 0.011 s
代码语言 C++ 内存使用 0.33 MiB
提交时间 2015-04-24 11:04:43
显示代码纯文本
#include<cstdio>
#include<string>
#include<set>
#include<vector>
#include<algorithm>
const int L_N=1000;
using namespace std;
struct EVE{
	vector<string> from,to;
}es[L_N];
set<string> have,got;
int N,M;
char tmps[L_N];
void output(vector<string> ret){
	for(int i=0;i<ret.size();i++){
		printf("%s ",ret[i].c_str());
	}
	printf("\n");
}
vector<string> parse(char str[]){
	//printf("parse:%s\n",str);
	
	int last=0;
	vector<string> ret;
	for(int i=0;str[i];i++){
		if(str[i]=='+'){
			str[i]=0;
			ret.push_back(string(str+last));
			last=i+1;
		}
	}
	ret.push_back(string(str+last));
	
	//output(ret);
	
	return ret;
}
bool vis[L_N];
//string ren[L_N*40];int rn;

int main(){
	freopen("origin.in","r",stdin);
	freopen("origin.out","w",stdout);
	scanf("%d",&N);
	for(int t=1;t<=N;t++){
		scanf("%s",tmps);
		for(int i=0;tmps[i];i++){
			if(tmps[i]=='='){
				tmps[i]=0;
				es[t].from=parse(tmps);
				es[t].to=parse(tmps+i+1);
				
				//output(es[i].from);
				break;
			}
		}
	}
	
	scanf("%d",&M);
	for(int i=1;i<=M;i++){
		scanf("%s",tmps);
		have.insert(string(tmps));
	}
	
	for(int t=1;t<=N;t++){
		bool new_=false;
		for(int i=1;i<=N;i++)if(!vis[i]){
			bool ok=true;
			//output(es[i].from);
			for(int j=0;j<es[i].from.size();j++){
				if(!have.count(es[i].from[j])){
					ok=false;
					break;
				}
			}
			if(ok){
				for(int j=0;j<es[i].to.size();j++){
					if(!have.count(es[i].to[j])){
						got.insert(es[i].to[j]);
						have.insert(es[i].to[j]);
					}
				}
				vis[i]=true;
				new_=true;
			}
		}
		if(!new_) break;
	}
	
	printf("%d\n",int(got.size()));
	for(set<string>::iterator it=got.begin(); it!=got.end(); ++it){
		printf("%s\n",it->c_str());
	}
	
	return 0;
}