2010年第3题
题目地址:http://jobdu.sinaapp.com/problem.php?pid=1007
提供一个测试样例
8 6
4 8 1
6 6 2
4 8 2
2 12 4
7 12 9
2 22 6
3 22 5
9 10 1
0 1 2 4 6 7
实际排序国家以及每次排序结果
4 8 1 4 4 2 2 2:3
6 6 2 3 6 3 5 3:1
4 8 2 4 4 4 4 4:1
7 12 9 2 2 5 6 2:1
3 22 5 6 1 6 3 1:2
9 10 1 1 3 1 1 1:1
C语言源码:
#include<stdio.h>#include<stdlib.h>#define maxsize 100000typedef struct ran{int a,b;double c,d;int num;int ra;}ran;ran r[maxsize];typedef struct country{int a,b,c;int rank[5];}country;country c[maxsize];int cmp1(const void *a,const void *b){ran *aa=(ran *)a;ran *bb=(ran *)b;return bb->a-aa->a;}int cmp2(const void *a,const void *b){ran *aa=(ran *)a;ran *bb=(ran *)b;return bb->b-aa->b;}int cmp3(const void *a,const void *b){ran *aa=(ran *)a;ran *bb=(ran *)b;return aa->c>bb->c?-1:1;}int cmp4(const void *a,const void *b){ran *aa=(ran *)a;ran *bb=(ran *)b;return aa->d>bb->d?-1:1;}int main(){int n,m,i,stack[maxsize],j,y,l,min,k;double x;while(scanf("%d %d",&n,&m)!=EOF){for(i=0;i<n;i++)scanf("%d %d %d",&c[i].a,&c[i].b,&c[i].c);for(i=0;i<m;i++)scanf("%d",&stack[i]);for(i=0;i<m;i++){j=stack[i];r[i].a=c[j].a;r[i].b=c[j].b;r[i].c=(double)c[j].a/c[j].c;r[i].d=(double)c[j].b/c[j].c;r[i].num=j;}for(k=1;k<=4;k++){switch(k){case 1:qsort(r,m,sizeof(r[0]),cmp1);break;case 2:qsort(r,m,sizeof(r[0]),cmp2);break;case 3:qsort(r,m,sizeof(r[0]),cmp3);break;default :qsort(r,m,sizeof(r[0]),cmp4);break;}if(k==1){x=-1;for(i=0;i<m;i++){if(r[i].a!=x){r[i].ra=i+1;y=i+1;x=r[i].a;}elser[i].ra=y;}for(i=0;i<m;i++)c[r[i].num].rank[1]=r[i].ra;}if(k==2){x=-1;for(i=0;i<m;i++){if(r[i].b!=x){r[i].ra=i+1;y=i+1;x=r[i].b;}elser[i].ra=y;}for(i=0;i<m;i++)c[r[i].num].rank[2]=r[i].ra;}if(k==3){x=-1;for(i=0;i<m;i++){if(r[i].c!=x){r[i].ra=i+1;y=i+1;x=r[i].c;}elser[i].ra=y;}for(i=0;i<m;i++)c[r[i].num].rank[3]=r[i].ra;}if(k==4){x=-1;for(i=0;i<m;i++){if(r[i].d!=x){r[i].ra=i+1;y=i+1;x=r[i].d;}elser[i].ra=y;}for(i=0;i<m;i++)c[r[i].num].rank[4]=r[i].ra;}}for(i=0;i<m;i++){j=stack[i];min=1;for(l=1;l<=4;l++)if(c[j].rank[l]<c[j].rank[min])min=l;printf("%d:%d\n",c[j].rank[min],min);}printf("\n");}}