比赛 |
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