F - 最终排名
Description
为了简化题目,这里的排名规则为:做出题目数量多的队伍排在前面,如果题数相等,保持输入时的相对顺序不要改变。
Input
单组输入。第一行有一个正整数N(1 < N ≤ 10000),表示队伍数量。接下来N 行包含两个整数,1 ≤ ID ≤ 10^7, 0 ≤ M ≤ 100。ID为队伍的编号,M为做出的题数。
Output
每组数据输出包含N行,第i行有两个整数,ID和M表示排在第i位的队伍的ID和做出的题数。
Sample
Input
8
1 2
16 3
11 2
20 3
3 5
26 4
7 1
22 4
Output
3 5
26 4
22 4
16 3
20 3
1 2
11 2
7 1
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
struct node
{
ll ID;
int M;
} a[10005];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%lld %d",&a[i].ID,&a[i].M);
for(int j=0;j<n-1;j++)
{
for(int i=0;i<n-j-1;i++)
if(a[i].M<a[i+1].M)
swap(a[i],a[i+1]);
}
for(int i=0;i<n;i++)
{
if(i==0)
printf("%lld %d",a[i].ID,a[i].M);
else
printf("\n%lld %d",a[i].ID,a[i].M);
}
}
对于此题本人用快排却无法完成(无代码过程错误)
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
struct node
{
ll ID;
int M;
} a[10005];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%lld %d",&a[i].ID,&a[i].M);
for(int j=0;j<n-1;j++)
{
for(int i=0;i<n-j-1;i++)
if(a[i].M<a[i+1].M)
swap(a[i],a[i+1]);
}
for(int i=0;i<n;i++)
{
if(i==0)
printf("%lld %d",a[i].ID,a[i].M);
else
printf("\n%lld %d",a[i].ID,a[i].M);
}
}