您的位置:首页 > 其它

hdu 1084

2011-04-21 11:22 218 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct elem{
int x;
char s[22];
int ti;
};

int cmp(const void *a,const void *b)
{
return strcmp(((elem*)a)->s,((elem*)b)->s);
}

int main()
{
int n;
int i;
int flag1,flag2,flag3,flag4;
int k1,k2,k3,k4;
elem arr[100];
int mark[100];
while(scanf("%d",&n) == 1 && n != -1){
flag1 = flag2 = flag3 = flag4 = 0;
for(i = 0;i < n;i++){
scanf("%d %s",&arr[i].x,arr[i].s);
mark[i] = 0;
arr[i].ti = i;
if(arr[i].x == 5) mark[i] = 100;
if(arr[i].x == 4) flag1++;
if(arr[i].x == 3) flag2++;
if(arr[i].x == 2) flag3++;
if(arr[i].x == 1) flag4++;
if(arr[i].x == 0) mark[i] = 50;
}
qsort(arr,n,sizeof(elem),cmp);//主要是这里的排序,无可否认的是qsort()真的好用!
k1 = k2 = k3 = k4 = 1;
for(i = 0;i < n;i++){
if((arr[i].x == 4 && k1 <= flag1/2)||flag1 == 1){
mark[arr[i].ti] = 95;
k1++;
}
else if(arr[i].x == 4 && k1 > flag1/2) mark[arr[i].ti] = 90;
if((arr[i].x == 3 && k2 <= flag2/2)||flag2 == 1){
mark[arr[i].ti] = 85;
k2++;
}
else if((arr[i].x == 3 && k2 > flag2/2)) mark[arr[i].ti] = 80;
if((arr[i].x == 2 && k3 <= flag3/2)||flag3 == 1){
mark[arr[i].ti] = 75;
k3++;
}
else if((arr[i].x == 2 && k3 > flag3/2)) mark[arr[i].ti] = 70;
if((arr[i].x == 1 && k4 <= flag4/2)||flag4 == 1){
mark[arr[i].ti] = 65;
k4++;
}
else if(arr[i].x == 1 && k4 > flag4/2) mark[arr[i].ti] = 60;
}
for(i = 0;i < n;i++){
printf("%d/n",mark[i]);
}
printf("/n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: