题目描述
输入的第一行是一个1到1000的整数N,表示总共有N位水王参加了争霸赛。
以下依次给出每位水王的描述,一位水王的描述占据两行,第一行为一个仅由字母和数字组成的长度不超过20的字符串,代表这个水王的ID,第二行一个高精度的整数(非负数),代表这个水王的发贴数。注意,这个整数的首位没有不必要的0。
考虑到IOIForum的数据库是有限的,所有水王发贴数的总长度(注意,是总长度而不是总和)不会超过10000。
除了子母、数字和必要的换行,输入中不会出现空格等字符。
思路
通过字符串的长度和大小进行排序,输出就可以了
O(nlogn)
#include <stdio.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
struct arr
{
string id,num;
}a[100000];
int cam(arr a,arr b)
{
if (a.num.size()!=b.num.size())
{
return a.num.size()>b.num.size();
}
else
{
if (a.num==b.num)
return a.id<b.id;
else return a.num>b.num;
}
}
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
cin>>a[i].id>>a[i].num;
sort(a+1,a+n+1,cam);
for (int i=1;i<=n;i++)
cout<<a[i].id<<endl;
}
Comments NOTHING