这里简单说一下,我联系这道题目,本来是想联系排序算法的,然后我用来系统函数sort排序,二分查找等等提高速度的方法;但是然并卵,每次都是运行超时啊,要疯掉了。看了一下大家的答案,发现自己陷入到排序的陷阱中了,根本不用排序的。就是一道数学题目!难受了我一晚上,睡觉前还在想到底是哪里的瓶颈,难为老年coder了。
#include<iostream> #include<algorithm> #include<map> using namespace std; struct Movie{ int bj; int cj; int scoreb; int scorec; int index; }; int main() { int n,m,firstScore=0,secondScore=0,index=1; cin >> n; map<int,int> strMap; for(int i = 0; i < n;i++){ int temp; cin >> temp; strMap[temp]++; } cin >> m; Movie ret[m]; for(int i = 0; i < m;i++){ //因为我的数据结构是这样所以会很浪费时间 ret[i].cj = 0; ret[i].bj = 0; ret[i].scoreb = 0; ret[i].scorec = 0; ret[i].index = i+1; cin >> ret[i].bj; } for(int i = 0; i < m;i++){ cin >> ret[i].cj; //这里不要每次都访问数组的小标,很浪费时间的。 int tempb = strMap[ret[i].bj]; int tempc = strMap[ret[i].cj]; int tempi = ret[i].index; if(tempb >= firstScore){ if(tempb > firstScore){ firstScore = tempb; secondScore = tempc; index = tempi; }else{ if(tempc > secondScore){ secondScore = tempc; index = tempi; } } } } cout<<index<<endl; return 0; }