Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
表示同样的算法c和c++时间差距好大!一个超时一个188msc++用vector stl排序 c用数组加快排。一个跪了一个188ms.... //c++代码 #include<iostream> #include<cstring> #include<algorithm> #include<vector> using namespace std; class player { public: player(){idx=cnt=0;}//idx索引数,cnt为出现个数 unsigned short idx,cnt; bool operator >(const player &p) const { return cnt>p.cnt; } bool operator <(const player &p) const { return idx<p.idx; } }; int main() { int a,b,i,j; vector<player> v2(10001); for(i=0;i<10001;i++)v2[i].idx=i; vector<player> v1(10001); void *p1,*p2; while(1) { p1=&v1[0]; p2=&v2[0]; cin>>a>>b; if(a!=0&&b!=0) { memcpy(p1,p2,sizeof(player)*v1.size());//清0 vector<player>::iterator it,yb; int tmp; for(i=0;i<a;i++) for(j=0;j<b;j++) { cin>>tmp; v1[tmp].cnt++; } sort(v1.begin(),v1.end(),greater<player>());//快排 it=v1.begin()+1; while(it->cnt==v1[1].cnt) it++; sort(v1.begin()+1,it,less<player>());//对第二的按索引快排 yb=v1.begin()+1; for(yb;yb!=it;yb++) cout<<yb->idx<<" "; cout<<endl; }else continue; } } //c代码 #include <iostream> #include <cstdlib> #include <fstream> using namespace std; #define MAX 10001 typedef struct { int num; int points; //出现的次数 }Node; Node node2[MAX]; Node node1[MAX]; int cmp(const void *a,const void *b) //降序排列 { return ((Node*)b)->points-((Node*)a)->points; } int cmp1(const void *a,const void *b) { return ((Node*)a)->num-((Node*)b)->num; } int main() { int n,m,i,maxn,nums,index,nCount; for(i=0; i<MAX; i++) { node1[i].num=i; node1[i].points=0; } while( scanf("%d%d",&n,&m)!=EOF && n+m) { memcpy(&node2[0],&node1[0],sizeof(Node)*MAX); for(i=0; i<n*m; i++) { scanf("%d",&nums); node2[nums].points++; } //根据points排序 qsort(node2,MAX,sizeof(Node),cmp); maxn=node2[0].points; //第一大的points值 i=1; while(node2[i].points==maxn) { i++; } //确定第二大的位置 index=i; //第二大的第一个位置 maxn=node2[i].points; //记录第二大的points值 nCount=0; while(node2[i].points==maxn) { nCount++; i++; } //把排第二的排序一下 qsort(node2+index,nCount,sizeof(Node),cmp1); while(nCount--) { printf("%d ",node2[index++].num); } printf("\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator