STL------sort三种比较算子定义
sort的三种比较算子的定义方式




例:一道细碎的细节模拟题; http://newoj.acmclub.cn/contests/1258/problem/3
题目描述:
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。
比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
输入:
一个日期,格式是”AA/BB/CC”。 (0 <= A, B, C <= 9)
输出:
输出若干个不相同的日期,每个日期一行,格式是”yyyy-MM-dd”。多个日期按从早到晚排列。
02/03/04
2002-03-04
2004-02-03
2004-03-02
#include <iostream>
#include <algorithm>
#include <cstdio>
//细碎细碎的枚举,模拟细节题
using namespace std;
int n=0;
int md[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //这个设计贼棒,以前一直用switch,case;
struct data{
int yy,mm,dd;
};
bool operator<(const data& x,const data& y)
{
if(x.yy==y.yy&&x.mm==y.mm)
return x.dd<y.dd;
else if(x.yy==y.yy)
return x.mm<y.mm;
else
return x.yy<y.yy;
}
data ans[10];
bool judge(data num) //这个判断日期合理性的函数贼棒,很有条理性,自己是敲不出来这样的!
{
if(num.yy<1960||num.yy>2059)
return false;
if(num.mm<0||num.mm>12)
return false;
if(num.yy%400==0||(num.yy%100!=0&&num.yy%4==0))
{
if(num.mm==2)
return num.dd>=1&&num.dd<=29; //这里也写的贼棒,贼简洁,直接返回逻辑表达式的真假
return num.dd>=1&&num.dd<=md[num.mm];
}else
return num.dd>=1&&num.dd<=md[num.mm];//md数组就是平年各月份的天数
}
void poss(int x,int y,int z)
{
data tmp;
tmp.yy=x,tmp.mm=y,tmp.dd=z;
if(judge(tmp))
ans[n++]=tmp;
}
int main()
{
int a,b,c;
scanf("%02d/%02d/%02d",&a,&b,&c); poss(1900+a,b,c);
poss(2000+a,b,c); poss(1900+c,a,b);
poss(2000+c,a,b); poss(1900+c,b,a);
poss(2000+c,b,a); sort(ans,ans+n); //排序之后去重,方便;
for(int i=0;i<n;i++)
{
if(ans[i].yy!=ans[i+1].yy||ans[i].mm!=ans[i+1].mm||ans[i].dd!=ans[i+1].dd)
printf("%d-%02d-%02d\n",ans[i].yy,ans[i].mm,ans[i].dd);
}
return 0;
}
//年月日之间一共有三种组合
//枚举之后,对每种组合进行判断;
//最后排序去重输出;
这题代码好啊,照着标程的思路敲的!!!自己敲不出来这么有条理的代码!
STL------sort三种比较算子定义的更多相关文章
- C++——STL中三种顺序容器的简要差别
C++ STL 提供了3个顺序容器 :vector, deque, list Vector动态数组.支持高速訪问:list双向链表,支持高速插入和删除. vector 中的元素是顺序存放的.所以随机訪 ...
- extjs组件添加事件监听的三种方式
extjs对组件添加监听的三种方式 在定义组件的配置时设置 如代码中所示: Java代码 xtype : 'textarea', name : 'dataSetField', labelSe ...
- Js基础知识4-函数的三种创建、四种调用(及关于new function()的解释)
在js中,函数本身属于对象的一种,因此可以定义.赋值,作为对象的属性或者成为其他函数的参数.函数名只是函数这个对象类的引用. 函数定义 // 函数的三种创建方法(定义方式) function one( ...
- Java数组的三种打印方式
1.数组的输出的三种方式 一维数组: 定义一个数组 int[] array = {1,2,3,4,5}; (1)传统的for循环方式 for(int i=0;i<array.length;i++ ...
- Android 三种菜单(Menu)的实现
感谢大佬:https://blog.csdn.net/chileme/article/details/82944764 一.常用方法 java onCreateOptionsMenu(Menu men ...
- C++中定义比较函数的三种方法
原文地址:http://fusharblog.com/3-ways-to-define-comparison-functions-in-cpp/ C++编程优与Pascal的原因之一是C++中存在ST ...
- STL传递比较函数进容器的三种方式
对于STL中的依靠比较排序的容器,均提供了一个模板参数来传递比较函数,默认的为std::less<>. 查阅Containers - C++ Reference可以看到典型的使用比较函数的 ...
- Sort merge join、Nested loops、Hash join(三种连接类型)
目前为止,典型的连接类型有3种: Sort merge join(SMJ排序-合并连接):首先生产driving table需要的数据,然后对这些数据按照连接操作关联列进行排序:然后生产probed ...
- Javascript定义类(class)的三种方法
将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...
- js 函数定义三种方式
<p>Js 函数定义的三种方式:</p> <br> <p>方式一:function</p> <script type="te ...
随机推荐
- Unity检测鼠标是否与UI交互
在Unity项目中,假设在鼠标按键时会触发游戏内的操作,但是在鼠标与UI进行交互时我们希望停止游戏中的操作,这是需要使用EventSystem中的方法来检测鼠标是否正在与UI交互 private bo ...
- Konga-Kong网关的权限控制指定消费者
刚开始陷入了误区了,网上很多参考例子都是如何实现身份证验证,而且看到konga上面配置身份插件的地方基本都有consumer一个配置项,一直纠结在这个如何通过key-auth实现指定的route或者s ...
- unidbgrid显示图片
column设置imageoptions属性,visible=true,设置width
- windows下 mstsc 远程Ubuntu 图形界面
安装及设置xrdp ------------------------------------------------------ touch ~/installXrdp.sh cat > ~/ ...
- 痞子衡嵌入式:我当选了2019年度官方论坛i.MXRT板块的顶级贡献者
痞子衡桌上有一个联邦快递公司件,放了近一个月了,是同事代领的,痞子衡一直没有拆开.今天心血来潮,决定拆开瞧一瞧,这一拆就拆出了一天的好心情. 原来快递里面是一件i.MXRT产品纪念T-shirt,还有 ...
- windows2003 的安装以及安装时遇到的问题
windows2003 的安装以及安装时遇到的问题 简介:Windows Server 2003是微软于2003年3月28日发布的基于Windows XP/NT5.1开发的服务器操作系统,并在同年4月 ...
- 使用Docker搭建MinIO集群服务
概述 因为在云服务器上默认只有一块磁盘,如果直接在系统盘上安装MinIO,会被拒绝,所以这里采用Docker的方式绕过这一限制 操作环境 操作系统 CentOS 7.9 MinIO版本 RELEASE ...
- day05-2-yaml
yaml 1.yaml介绍 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发这种语言时,YAML的意思其实是 ...
- CSS必知必会
CSS概念 css的使用是让网页具有统一美观的页面,css层叠样式表,简称样式表,文件后缀名.css css的规则由两部分构成:选择器以及一条或者多条声明 选择器:通常是需要改变的HTML元素 声明: ...
- 在surging 微服务引擎下如何搭建webservice和身份验证
一.前言 现实生产中,有一些比较老的系统对外提供的接口都是WebService,尤其是比较老的系统都是围绕ESB进行搭建,而对外提供就需要WebService ,为了更好完善其解决方案,故集成了web ...