zoukankan      html  css  js  c++  java
  • 原因代码10044Erdos number Time limit exceeded

    近期笔者几篇文章介绍了改原因代码的文章. 关联文章的地址

        以下是我的代码,但是在通过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, 烦请告诉,感谢

    文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
    “如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
    “如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
      最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”

  • 相关阅读:
    CNN网络架构演进:从LeNet到DenseNet
    【OCR技术系列之四】基于深度学习的文字识别(3755个汉字)
    【OCR技术系列之三】大批量生成文字训练集
    【Keras】基于SegNet和U-Net的遥感图像语义分割
    Python各类图像库的图片读写方式总结
    我的2017:从工作再到学生
    VS2017 WinFrom打包设置与教程
    采用Opserver来监控你的ASP.NET项目系列(三、监控你的服务器状态)
    采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)
    采用Opserver来监控你的ASP.NET项目系列(一、Opserver监控的简介与平台搭建)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3057355.html
Copyright © 2011-2022 走看看