UVALive 7077 - Song Jiang's rank list(模拟)

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5085

题目大意:给n个人以及每个人的名字s和他能杀死的敌人数m,将这些人按能杀死的敌人数进行排名并输出,m次查询,每次查询输出这个人的两个排名,

一个是他在他排名之前(他不能杀死,注:他不能杀死与他杀死敌人数相等的人)的人数 + 1, 一个是他排名之前与他杀死敌人数相等的人数 + 1

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm> using namespace std; const int N = ; struct st
{
int m, add, same, f;
char s[];
} node[N], a[N]; int cmp(const void *a, const void *b)
{
st *s1 = (st *)a , *s2 = (st *)b;
if(s1->m != s2->m)
return s2->m - s1->m;
else
return strcmp(s1->s, s2->s);
//按字典序排列
} int main()
{
int n, i, j, m;
while(scanf("%d", &n), n)
{
for(i = ; i < n ; i++)
{
scanf("%s%d", node[i].s, &node[i].m);
node[i].same = node[i].f = ;
}
qsort(node, n, sizeof(node[]), cmp);
scanf("%d", &m);
for(i = ; i <= m ; i++)
{
scanf("%s", a[i].s);
for(j = ; j < n ; j++)
{
if(strcmp(a[i].s, node[j].s) == )
a[i].add = j;
}
}//a[i].add就是第i个人的排名,排名从第0名开始
for(i = ; i < n - ; i++)
{
for(j = i + ; j < n ; j++)
{
if(node[i].m == node[j].m)
node[j].same++;
}
}//统计他排名之前与他杀死敌人数相等的人数
for(i = ; i < n ; i++)
printf("%s %d\n", node[i].s, node[i].m);
for(i = ; i <= m ; i++)
{
if(node[a[i].add].same >= )
printf("%d %d\n", a[i].add - node[a[i].add].same + , node[a[i].add].same + );
else
printf("%d\n", a[i].add - node[a[i].add].same + );
}
}
return ;
}
上一篇:《Redis入门指南(第2版)》读后感


下一篇:xfce4 dev tools的一些说明