SSL 1549_水王争霸_排序

发布于 2019-05-14  990 次阅读


题目描述

输入的第一行是一个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;
}