【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;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

opencv:基于凹点匹配的重叠分割

有重叠部分的两个同类型物体由于灰度近似,所以一般较难分类(如下图)。实际操作中是使用一种凹点匹配的方法来寻找分割点进行分割。 两个重叠物体 其中黄色十字地方就是凹点     寻找到凹点是解决该...
  • cfqcfqcfqcfqcfq
  • cfqcfqcfqcfqcfq
  • 2016年11月11日 22:28
  • 1769

nowcoder 2017年浙江工业大学大学生程序设计迎新赛预赛-栗酱的异或和

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目链接:点击打开链接...
  • lz161530245
  • lz161530245
  • 2017年12月17日 12:51
  • 205

行程编码压缩算法

1. 算法说明RLE(Run Length Encoding行程编码)算法是一个简单高效的无损数据压缩算法,其基本思路是把数据看成一个线性序列,而这些数据序列组织方式分成两种情况:一种是连续的重复数据...
  • wutong_xingkong
  • wutong_xingkong
  • 2015年12月21日 21:20
  • 1436

行程编码解码.m

close all;clear all;clc; %关闭所有图形窗口,清除工作空间所有的变量,清除命令行 I1=imread('e:\role0\lena.jpg'); %读入图像 I2=I1(:);...
  • whk100312
  • whk100312
  • 2015年05月11日 07:18
  • 435

咨询的奥秘--笔记

咨询的奥秘--笔记        随着毕业入职新公司,做SCM的实施顾问,一方面在学习Oracle EBS的相关系统功能,另一方面了解开发相关的PL/SQL、Forms Builder等相关知识,还抽...
  • u012025054
  • u012025054
  • 2015年08月30日 00:35
  • 1903

行程编码c语言实现

一道行程编码的C编程题 题目要求: 如一字串为
  • jennifer111111
  • jennifer111111
  • 2014年05月12日 22:33
  • 969

二叉树输出(凹入表示法)

二叉树输出(凹入表示法)
  • summit2017
  • summit2017
  • 2017年02月10日 21:57
  • 2994

漫步最优化十四——凸函数与凹函数

我一直都在流浪,\textbf{我一直都在流浪,} 可我却不曾见过海洋。\textbf{可我却不曾见过海洋。}  我努力微笑坚强,\textbf{ 我努力微笑坚强,} 用寂寞筑成一道围墙。\te...
  • u010182633
  • u010182633
  • 2017年07月17日 19:50
  • 685

利用Serverchan进行微信告警推送

Serverchan实现微信告警推送 「Server酱」,英文名「ServerChan」,是一款「程序员」和「服务器」之间的通信软件。 说人话?就是从服务器推报警和日志到手机的...
  • English0523
  • English0523
  • 2017年12月21日 17:11
  • 988

上凹还是下凹,叫法相反的凹函数 Concave Upward and Downward

Concave Upward and Downward       Concave upward is when the slope increases:   ...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年05月27日 16:10
  • 3873
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【GZOJ】1373——凹酱的行程
举报原因:
原因补充:

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