近期笔者几篇文章介绍了改原因代码的文章. 关联文章的地址
以下是我的代码,但是在通过uva试测是time limit exceeded, 不道知是什么原因,而且我自己试测了几个数据都是对的。
#include<iostream> #include<string> #include<vector> #include<map> #include<stdio.h> #include<algorithm> using namespace std; string Erdos="Erdos, P."; string Scenario="Scenario "; string Infinity="infinity"; map<string,int> Scientists; void loopFind(map<int,vector<string> > map_name,vector<string> parters,vector<int> lines,int value){ if(parters.size()<=0)return; for(int i=0;i<parters.size();++i){ vector<string> parter1; vector<int> lines1; string tmp=parters.at(i); for(map<int,vector<string> >::iterator it=map_name.begin();it!=map_name.end();++it){ vector<string> tmpNames=it->second; vector<int>::iterator tmpIndex=find(lines.begin(),lines.end(),it->first); vector<string>::iterator it1=find(tmpNames.begin(),tmpNames.end(),tmp); if(tmpIndex!=lines.end())break; else if(it1!=tmpNames.end()){ for(int j=0;j<tmpNames.size();++j){ string tmp1=tmpNames.at(j); if(tmp1!=tmp){ Scientists[tmp1]=value; parter1.push_back(tmp1); } } lines1.push_back(it->first); } } loopFind(map_name,parter1,lines1,value+1); } } void findScientists(map<int,vector<string> > map_name){ Scientists[Erdos]=0; vector<string> parters; vector<int> lines; for(map<int,vector<string> >::iterator it=map_name.begin();it!=map_name.end();++it){ vector<string> names=it->second; vector<string>::iterator tmp=find(names.begin(),names.end(),Erdos); if(tmp!=names.end()){ for(int i=0;i<names.size();++i){ string tmp1=names.at(i); if(tmp1!=Erdos){ Scientists[tmp1]=1; parters.push_back(tmp1); } } lines.push_back(it->first); } } loopFind(map_name,parters,lines,2); } void getErdosNumber(vector<string> paper,vector<string> names){ int index=1; map<int,vector<string> > map_name; for(vector<string>:: iterator it=paper.begin();it!=paper.end();++it){ string tmpString=*it; vector<string> tmpSci; int begin=0; int end=0; if(tmpString.length()<1)continue; while(end<tmpString.length()){ if(tmpString[end]=='.'&&tmpString[end+1]==','&&tmpString[end+2]==' '){ string tmpName=tmpString.substr(begin,end-begin+1); tmpSci.push_back(tmpName); begin=end+3; end=begin; } else if(tmpString[end]==':'){ string tmpName=tmpString.substr(begin,end-begin); tmpSci.push_back(tmpName); break; } else ++end; } map_name[index]=tmpSci; ++index; } findScientists(map_name); } int main(){ int n=0; cin>>n; for(int i=1;i<=n;++i){ int P=0; int N=0; cin>>P>>N; if(P<1||N<1)continue; getchar(); vector<string> paper; for(int x=0;x<P;++x){ string tmpPaper; getline(cin,tmpPaper); paper.push_back(tmpPaper); } vector<string> names; for(int y=0;y<N;++y){ string tmpName; getline(cin,tmpName); names.push_back(tmpName); } Scientists.clear(); getErdosNumber(paper,names); cout<<Scenario<<i<<endl; map<string,int>::iterator it; for(vector<string>::iterator ite=names.begin();ite!=names.end();++ite){ it=Scientists.find(*ite); if(it!=Scientists.end()){ cout<<it->first<<" "<<it->second<<endl; } else{ cout<<*ite<<" "<<Infinity<<endl; } } } return 0; }
如果有人道知为什么会是time limit exceeded, 烦请告诉,感谢
文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
“如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
“如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”