比赛 20150424 评测结果 EEEEEEEEEE
题目名称 物质起源 最终得分 0
用户昵称 wolf. 运行时间 0.974 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2015-04-24 10:18:20
显示代码纯文本
#include<iostream>
#include<fstream>
#include<bitset>
#include<vector>
#include<deque>
#include<map>
#include<set>
#include<queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstdio>
using namespace std;
#if defined wolf
const string ok="OK";
const string kk="	";
ofstream nnew("origin.in",ios::app);
ifstream fin("origin.in");
#define fout cout
#define Endl endl
#else
ifstream fin("origin.in");
ofstream fout("origin.out");
#endif
vector<string> text;
map<string,bool> TT;
vector<string> newer;
FILE *in,*out;
string check(const string txt,int p){
	string ans="";
	for(int i=p;i!=txt.size();++i){//查找每个化学式
		if((txt[i]>='a'&&txt[i]<='z')||(txt[i]>='0'&&txt[i]<='9')||(txt[i]>='A'&&txt[i]<='Z')){
			ans+=txt[i];
		}else{
			return ans;
		}
	}
	return ans;
}
void core(){
	vector<bool> flag;
	flag.resize(text.size());
	bool fall=1;
	while(fall){
		fall=0;
		for(int i=0;i!=flag.size();++i){//查找每个方程式
			if(flag[i]){
				continue;
			}
			//cout<<text[i]<<endl;
			//cout<<check(text[i],0)<<endl;
			//cout<<text[i][check(text[i],0).size()]<<endl;
			bool io=1;
			for(int j=0;j<text[i].size();){//查找每个元素
				string txt=check(text[i],j);//下一位元素
				j+=txt.size();
				//cout<<txt<<kk<<text[i][j]<<endl;
				if(io){//处于等号左边
					if(TT.find(txt)==TT.end()){//不存在该元素
						goto next;
					}
				}else{//处于等号右边
					if(TT.find(txt)==TT.end()){//此时有新物质生成
						newer.push_back(txt);
						TT[txt]=1;
						fall=1;
					}
				}
				if(text[i][j]=='='){
					io=0;
				}
				++j;
			}
			//到此说明有这个方程式已完成
			flag[i]=1;
			next:
			;
		}
	}
	sort(newer.begin(),newer.end());
	fout<<newer.size()<<endl;
	for(int i=0;i!=newer.size();++i){
		cout<<newer[i]<<endl;
	}
}
int main(){
	in=fopen("origin.in","r");
	out=fopen("origin.out","w");
	int n=0;
	fscanf(in,"%d",&n);
	//cout<<n<<endl;
	for(int i=0;i!=n;++i){
		char ch[15];
		fscanf(in,"%s",ch);
		text.push_back(string(ch));
		//cout<<text[text.size()-1]<<endl;
	}
	//cout<<endl;
	int m=0;
	fscanf(in,"%d",&m);
	for(int i=0;i!=m;++i){
		char ch[15];
		fscanf(in,"%s",ch);
		TT[string(ch)]=1;
	}
	//cout<<"ans"<<endl;
	core();
	//-------------------------*/
	#if defined wolf
	cout<<endl<<(double)clock()/CLOCKS_PER_SEC<<'s'<<endl;
	#endif
	return 0;
}
//Designed by wolf
//Fri Apr 24 2015