【GZOJ】1373——凹酱的行程

原创 2015年11月18日 18:30:57

题目链接广大OJ1373
本题亦为广大15级第一次周赛的C题。

题目内容

Problem Description
悠木碧(以下通称凹酱,昵称来源请百度)是一位活跃在声优界的女性声优,同时也作为偶像活跃着。

由于凹酱的人气不断上升,她的日程安排也越来越满。

凹酱每天都会接到不同的任务(就是配音啊演唱会啊之类的,以下统称为LIVE),以及不固定时间的训练(以下统称为Practice),再加上她每天都有想玩的游戏(这也是日程的一部分哦)(凹酱玩游戏很厉害的=w=)(以下统称为Game),她的日程表堆得非常乱,甚至搞不清楚哪一天要做什么事。

现在,你需要做出一个程序,帮助凹酱来让她的日程表有序一些。

按照她的期望,日程表应该是这样排的:

1.按日期排

2.按活动内容排序,LIVE要优先于Practice,而Practice要优先于Game

例如说,有如下日程表:

3月22日 LIVE

2月1日 Game

3月22日 Practice

4月7日 Game

那么整理有序之后就应该是这样的:

2月1日 Game

3月22日 LIVE

3月22日 Practice

4月7日 Game

Input
多组输入数据

每组数据的第一行为n(1<=n<=1000),表示凹酱的日程表里有几个日程。

接下来有n行,每一行包括两个数字m(表示月份),d(表示日数)和一个字符串(这个字符串只有“LIVE”,“Game”,“Practice”三种可能),分别用空格隔开。

Output
对于每组输入数据,输出整理好的日程表,具体格式参照样例。

每输出一组输出数据就要打一个空行。

Sample Input
3
1 1 LIVE
8 7 LIVE
9 10 Game
4
3 22 LIVE
6 7 LIVE
2 22 Practice
3 22 Game
2
6 6 Game
6 6 Practice
Sample Output
1 1 LIVE
8 7 LIVE
9 10 Game

2 22 Practice
3 22 LIVE
3 22 Game
6 7 LIVE

6 6 Practice
6 6 Game
Hint
接到整理好的日程表之后的凹酱选择了取消所有日程(喂!)

解题思路

请无视Hint我家凹酱才不会那么不认真!
咳,跑题了。
这道题就是简单的结构体的应用和STL排序函数的重载比较函数的简单应用。
结构体的话参照c++的第五章,这里主要说说STL自带的排序函数。
C++的标准模板库(STL)里有一个现成的排序函数sort可以进行排序。
通俗的使用格式如下所示:
sort(头指针,尾指针,可缺省的比较函数)
使用示例:对数组a[5]={2,1,3,6,4}进行从小到大的排序。只需要用sort(a,a+5);这个语句就可以了。
sort函数使用的是一种叫快速排序的算法,它的排序速度远远快于冒泡排序啊选择排序之类的。
sort函数默认从小到大排序,那么要是要让它按照其他排序准则(例如说从大到小)排序的话就需要自己写一个比较函数了。
例如说,要从大到小排序,那么就需要写这样一个比较函数:

bool compare(int a,int b)
{
    return a>b;
}

只需要将这个比较函数加入sort函数里面就可以了,就像这样:

sort(a,a+5,compare);

而对于结构体的排序,重载比较函数的功能就更为强大。
例如说,现在定义一个结构体:

struct point
{
    int x;
    int y;
};

然后用这个结构体定义数组point a[1000];
假设这个数组a已经有输入了,要对其进行排序,按x的从小到大排序,如果x相同的话就按y的从小到大排序。那么就可以拟一个这样的比较函数:

bool compare(point a,point b)
{
    return a.x<b.x||(a.x==b.x&&a.y<b.y);
}

然后调用该比较函数即可:

sort(a,a+1000,compare);

使用这个方法就能很容易地做出这道题了。

代码

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct f
{
    int month;
    int day;
    string s;
};
bool compare(f a,f b)
{
    if(a.month<b.month)return true;
    else if(a.month==b.month)
    {
        if(a.day<b.day)return true;
        else if(a.day==b.day)
        {
            int aa,bb;
            if(a.s=="Game")aa=1;
            else if(a.s=="Practice")aa=2;
            else if(a.s=="LIVE")aa=3;
            if(b.s=="Game")bb=1;
            else if(b.s=="Practice")bb=2;
            else if(b.s=="LIVE")bb=3;
            if(aa>bb)return true;
            return false;
        }
        return false;
    }
    return false;
}
int main()
{
    int n;
    while(cin>>n)
    {
        f a[1000];
        for(int i=0;i<n;i++)cin>>a[i].month>>a[i].day>>a[i].s;
        sort(a,a+n,compare);
        for(int i=0;i<n;i++)
        {
            cout<<a[i].month<<' '<<a[i].day<<' '<<a[i].s<<endl;
        }
        cout<<endl;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【GZOJ】1308——开灯关灯

题目链接:广大OJ1308 本题亦为广大15级第一次周赛的H题。题目内容Problem Description 有一个3*3的九宫格,每个格子上有一盏亮着的灯1 2 34 5 67 8 9当按动某...

【GZOJ】1369——小明跳楼梯

题目链接:广大OJ1369 本题亦为广大15级第一次周赛的B题。题目内容Problem Description 小明很喜欢跳楼梯。 他可以一次跳一阶楼梯(记为1),也可以一次跳两个台阶(记为2)...

【GZOJ】1368——爱迪生的烦恼

广大15级第一次周赛E题

【GZOJ】1374——口袋妖怪对战

题目链接:广大OJ1374 本题亦为广大15级第一次周赛的I题。题目内容Problem Description 一年一度的口袋妖怪大赛开始了!!!现在是四天王之一的渡对战传说中的训练师帽子!!!渡...

SCDOC1373-CN

  • 2016-01-12 14:46
  • 4.99MB
  • 下载

es1371 es1373 SRC增强版驱动

  • 2012-08-14 21:51
  • 11.14MB
  • 下载

【剑指Offer面试编程题】题目1373:整数中1出现的次数--九度OJ

对于给定一个数,算包含的1的个数,我们可以将这个数分为很多部分,然后分别算1的个数。首先我们很容易得到一个n位数中1的个数,n位数1的个数等于n-1位数中1的个数与10相乘加上第n位为1的额外增加的个...

es1371 1373自制硬加强完整版

  • 2012-07-26 12:12
  • 11.09MB
  • 下载

【剑指Offer面试题】 九度OJ1373:整数中1出现的次数(从1到n整数中1出现的次数)

题目链接地址: http://ac.jobdu.com/problem.php?pid=1373题目1373:整数中1出现的次数(从1到n整数中1出现的次数)时间限制:1 秒内存限制:32 兆特殊...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)