HDU——3789 奧運排序問題
阿新 • • 發佈:2018-11-16
不是總排名,是給定的序號排名!!!
#include<iostream> #include<set> #include<string> #include<cmath> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; #define maxn 1005 struct node{ double gp; double jp; double r; int id; }a[maxn]; bool cmp1(node a,node b) { return a.gp>b.gp; } bool cmp2(node a,node b) { return a.jp>b.jp; } bool cmp3(node a,node b) { return a.gp/a.r>b.gp/b.r; } bool cmp4(node a,node b) { return a.jp/a.r>b.jp/b.r; } int main() { int m,n; int need[maxn]; int pm[maxn][5]; while(~scanf("%d%d",&m,&n)) { for(int i=0;i<m;i++) { scanf("%lf%lf%lf",&a[i].gp,&a[i].jp,&a[i].r); a[i].id=i; } for(int i=0;i<n;i++) { scanf("%d",&need[i]); } sort(a,a+m,cmp1); pm[a[0].id][1]=1; for(int i=1;i<m;i++) { if(a[i].gp==a[i-1].gp) pm[a[i].id][1]=pm[a[i-1].id][1]; else pm[a[i].id][1]=i+1; } sort(a,a+m,cmp2); pm[a[0].id][2]=1; for(int i=1;i<m;i++) { if(a[i].jp==a[i-1].jp) pm[a[i].id][2]=pm[a[i-1].id][2]; else pm[a[i].id][2]=i+1; } sort(a,a+m,cmp3); pm[a[0].id][3]=1; for(int i=1;i<m;i++) { if(a[i].gp/a[i].r==a[i-1].gp/a[i-1].r) pm[a[i].id][3]=pm[a[i-1].id][3]; else pm[a[i].id][3]=i+1; } sort(a,a+m,cmp4); pm[a[0].id][4]=1; for(int i=1;i<m;i++) { if(a[i].jp/a[i].r==a[i-1].jp/a[i-1].r) pm[a[i].id][4]=pm[a[i-1].id][4]; else pm[a[i].id][4]=i+1; } for(int i=0;i<n;i++) { int Min=m+1; int type=5; for(int k=1;k<=4;k++) { int t=1; for(int j=0;j<n;j++) { if(i!=j) { if(pm[need[i]][k]>pm[need[j]][k]) t++; } } if(t<Min) { Min=t; type=k; } } printf("%d:%d\n",Min,type); } printf("\n"); } return 0; }