一个结构体排序题
在ACM赛制中,排名的依据标准有两个,一是队伍的解题数,二是队伍解题耗费的时间。解题数为排名的主要依据,解出更多题目的队伍排名更高;而对于解题数相同的队伍,根据他们解题耗时进行排名,耗时短的队伍排名更高。
现给出某次ACM比赛的队伍最终成绩,即解题数和解题耗时,其中存在并列的队伍,也就是说解题数和解题耗时完全相同(这种情况正规比赛不会出现,本题是假设)。要求回答出排某一名次的队伍共存在多少并列。输入 输入第一行包含两个整数n和k(1 ≤ k ≤ n ≤ 50),其中n表示队伍数,k表示需要查询并列的名次。
接下来是n行,表示n个队伍的成绩,每行包含两个整数p和t (1 ≤ p, t ≤ 50),p表示队伍解题数,t表示队伍解题耗时。输出 输出一个整数,即排第k名的队伍存在的并列队伍总数。
第一次接触这样的题,确实是学到了!
这个程序的重点就是排序和计数了
排序用sore并且用if判断
如果做题数相等,按时间从小到大排序,否则按做题数从大到小排序,
第二个点就是计数、
首先写一个大for循环
sum用来累计
h用来比较
这段是这程序最精髓的一段,但我描述不好就直接放源码了
for(int i = 0;i < n;i ++)
{
sum ++;
h++;
if(a[i].f!=a[i+1].f||a[i].t!=a[i+1].t||i==n-1)
{
if(h >= k)
{
cout<<sum<<endl;
break;
}
sum=0;
}