记录编号 |
160162 |
评测结果 |
AAAAAAAAAA |
题目名称 |
物质起源 |
最终得分 |
100 |
用户昵称 |
wolf. |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.005 s |
提交时间 |
2015-04-24 12:18:22 |
内存使用 |
0.31 MiB |
显示代码纯文本
#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()+2,0);
bool fall=1;
while(fall){
fall=0;
for(int i=0;i!=text.size();++i){//查找每个方程式
if(flag[i]){
continue;
}
bool io=1;
for(int j=0;j<text[i].size();){//查找每个元素
string txt=check(text[i],j);//下一位元素
j+=txt.size();
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){
fout<<newer[i]<<endl;
}
}
int main(){
int n=0;
fin>>n;
for(int i=0;i!=n;++i){
string txt;
fin>>txt;
text.push_back(txt);
}
int m=0;
fin>>m;
for(int i=0;i!=m;++i){
string txt;
fin>>txt;
TT[txt]=1;
}
core();
//-------------------------*/
#if defined wolf
cout<<endl<<(double)clock()/CLOCKS_PER_SEC<<'s'<<endl;
#endif
return 0;
}
//Designed by wolf
//Fri Apr 24 2015