1 条题解
-
0
C :
#include <stdio.h> #include <malloc.h> typedef struct Record { int gold; int award; int people; }Record; int sort(Record *recs,int nums[],int M) { for(int i=0;i<M;i++) { int rank[4]; rank[0]=M; rank[1]=M; rank[2]=M; rank[3]=M; for(int j=0;j<M;j++) { if(i!=j&&(*(recs+nums[i])).gold>=(*(recs+nums[j])).gold) { rank[0]--; } } for(int j=0;j<M;j++) { if(i!=j&&(*(recs+nums[i])).award>=(*(recs+nums[j])).award) { rank[1]--; } } for(int j=0;j<M;j++) { if(i!=j&&(*(recs+nums[i])).gold/(float)((*(recs+nums[i])).people)>=(*(recs+nums[j])).gold/(float)((*(recs+nums[j])).people)) { rank[2]--; } } for(int j=0;j<M;j++) { if(i!=j&&(*(recs+nums[i])).gold/(float)((*(recs+nums[i])).people)>=(*(recs+nums[j])).gold/(float)((*(recs+nums[j])).people)) { rank[3]--; } } int min=rank[0];int minp=0; for(int i=1;i<4;i++) { if(min>rank[i]) { min=rank[i]; minp=i; } } printf("%d:%d\n",min,minp+1); } printf("\n"); } int main() { while(1) { int N; int M; int nums[200]; if(scanf("%d",&N)==EOF) { break; } scanf("%d",&M); Record* recs=(Record*)malloc(N*sizeof(Record)); for(int i=0;i<N;i++) { scanf("%d",&((*(recs+i)).gold)); scanf("%d",&((*(recs+i)).award)); scanf("%d",&((*(recs+i)).people)); } for(int i=0;i<M;i++) { scanf("%d",&nums[i]); } sort(recs,nums,M); } }
C++ :
#include <stdio.h> #include <algorithm> using namespace std; struct Nation{ // 国家信息结构类型 int num; // 国家编号 double orderValue[4]; // 用来排名的值 int order[4]; // 名次 }; Nation na[100000]; // 存储国家信息 bool cmp0(Nation a,Nation b){ // 按国家编号排名 return a.num < b.num; } bool cmp1(Nation a,Nation b){ // 按金牌数排名 return a.orderValue[0] > b.orderValue[0]; } bool cmp2(Nation a,Nation b){ // 按奖牌数排名 return a.orderValue[1] > b.orderValue[1]; } bool cmp3(Nation a,Nation b){ // 按金牌人口比排名 return a.orderValue[2] > b.orderValue[2]; } bool cmp4(Nation a,Nation b){ // 按奖牌人口比排名 return a.orderValue[3] > b.orderValue[3]; } int main(){ #ifndef ONLINE_JUDGE freopen("in", "r", stdin); #endif int n, m; // 用来存储国家总数以及需要排名国家的数目 int gold, total, pop; // 用来读取金牌数、奖牌数以及人口 int need; // 存储需要排名的国家编号数 while(scanf("%d%d", &n, &m) != EOF){ int i; for(i=0; i<n; i++){ // 读入国家信息,并计算金牌人口比以及奖牌人口比 scanf("%d%d%d", &gold, &total, &pop); na[i].orderValue[0] = gold; na[i].orderValue[1] = total; na[i].orderValue[2] = 1.0*gold/pop; na[i].orderValue[3] = 1.0*total/pop; na[i].num = i; } for(i=0; i<m; i++){ // 只存储需要排名的国家 scanf("%d", &need); na[i] = na[need]; } // 按金牌数排名,计算名次 sort(na, na+m, cmp1); for(i=0; i<m; i++){ if(i>0 && na[i-1].orderValue[0]==na[i].orderValue[0]){ na[i].order[0] = na[i-1].order[0]; }else{ na[i].order[0] = i+1; } } // 按奖牌数排名,计算名次 sort(na, na+m, cmp2); for(i=0; i<m; i++){ if(i>0 && na[i-1].orderValue[1]==na[i].orderValue[1]){ na[i].order[1] = na[i-1].order[1]; }else{ na[i].order[1] = i+1; } } // 按金牌人口比排名,计算名次 sort(na, na+m, cmp3); for(i=0; i<m; i++){ if(i>0 && na[i-1].orderValue[2]==na[i].orderValue[2]){ na[i].order[2] = na[i-1].order[2]; }else{ na[i].order[2] = i+1; } } // 按奖牌人口比排名,计算名次 sort(na, na+m, cmp4); for(i=0; i<m; i++){ if(i>0 && na[i-1].orderValue[3]==na[i].orderValue[3]){ na[i].order[3] = na[i-1].order[3]; }else{ na[i].order[3] = i+1; } } // 按国家编号排序,输出结果 sort(na, na+m, cmp0); int j, index; for(i=0; i<m; i++){ index = 0; // 从四种方法中获得最佳结果 for(j=0; j<4; j++){ if(na[i].order[j] < na[i].order[index]){ index = j; } } printf("%d:%d\n", na[i].order[index], index+1); } putchar('\n'); } return 0; }
Java :
import java.util.*; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); while(in.hasNextInt()){ int n=in.nextInt(); int m=in.nextInt(); int[] a=new int[n]; int[] b=new int[n]; int[] c=new int[n]; double[] d=new double[n]; double[] e=new double[n]; for(int i=0;i<n;i++){ a[i]=in.nextInt(); b[i]=in.nextInt(); c[i]=in.nextInt(); d[i]=a[i]*1.0/c[i]; e[i]=b[i]*1.0/c[i]; } int[] a3=MM(a); int[] b3=MM(b); int[] d3=MM(d); int[] e3=MM(e); for(int h=0;h<m;h++){ int g=in.nextInt(); int y=MMM(a3[g],b3[g],d3[g],e3[g]); if(a3[g]==y) {System.out.println(y+":"+1);continue;} if(b3[g]==y) {System.out.println(y+":"+2);continue;} if(d3[g]==y) {System.out.println(y+":"+3);continue;} if(e3[g]==y) {System.out.println(y+":"+4);continue;} } System.out.println(); } } public static int[] MM(int[] a) { int[] a1 =new int[a.length]; int max=0,j,s=0,count=1; while(Mm(a)){ max=0; for(j=0;j<a.length;j++) if(a[j]>max) max=a[j]; for(int k=0;k<a.length;k++) if(a[k]==max) {s++;a1[k]=count;a[k]=-1;} count=s+1; } return a1; } public static int[] MM(double[] a) { int[] a1 =new int[a.length]; double max=0; int j,s=0,count=1; while(Mm(a)){ max=0; for(j=0;j<a.length;j++) if(a[j]>max) max=a[j]; for(int k=0;k<a.length;k++) if(a[k]==max) {s++;a1[k]=count;a[k]=-1.0;} count=s+1; } return a1; } public static boolean Mm(int[] a) { for(int i=0;i<a.length;i++) if(a[i]>=0) return true; return false; } public static boolean Mm(double[] a) { for(int i=0;i<a.length;i++) if(a[i]>=0) return true; return false; } public static int MMM(int a,int b,int c,int d){ int min=a; if(min>b) min=b; if(min>c) min=c; if(min>d) min=d; return min; } }
- 1
信息
- ID
- 527
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者