比赛 |
20150424 |
评测结果 |
AAAAAAAAATTTTAA |
题目名称 |
牛跳房子 |
最终得分 |
73 |
用户昵称 |
Chenyao2333 |
运行时间 |
7.561 s |
代码语言 |
C++ |
内存使用 |
204.05 MiB |
提交时间 |
2015-04-24 12:07:55 |
显示代码纯文本
#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;
}