SSL 1549_水王争霸_排序

发布于 2019-05-21  733 次阅读


题目描述

众所周知,IOIForum有很多水王,他们的发贴数是如此之多,以至于必须要用高精度数才能保存。
  为了迎接国庆,IOIForum决定举行一次水王争霸赛,比赛的规则是将这些水王截止到2003年9月30日23时59分59秒这一刻所发的总贴数从大到小进行排序。每个水王当然都想取得尽量靠前的名次,所以他们竭尽全力,不择手段地进行灌水。
  终于,激动人心的一刻到来了,2003年10月1日0时0分0秒,你作为裁判得到了每个水王的发贴数,现在,你的任务是公正地把这些水王按照发贴数从大到小进行排序。

  

思路

字符串排序,先判断长度再按位比较

#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;
}