51Nod——T 1631 小鲨鱼在51nod小学

https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1631

基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题

 收藏

 关注

鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学。并依靠算法方面的特长,在班里担任了许多职务。

每一个职务都有一个起始时间A和结束时间B,意为小鲨鱼在[A, B]时间内,担任了某职务(inclusively)。

现在给定小鲨鱼的职务履历表,你可以高效的给出小鲨鱼在某天担任了哪些职务吗?

p.s. 由于小鲨鱼担任的职务太多,所有任期小于一个自然月的职务都忽略不计。(如1月1日~2月1日为一个自然月,即月份加1)

p.p.s. 输入数据保证小鲨鱼同时不担任超过200种职务。(牛!)

p.p.p.s 输入的日期均为合法日期,范围在2000年01月01日~2999年12月31日。

p.p.p.p.s巨大的输入输出,推荐使用scanf/printf,编译器推荐使用Virtual C++

Input

第一行为一个整数n,代表小鲨鱼担任过N种职务。(1 <= n <= 10^5)
接下来的n行,每一行为七个整数,y0, m0, d0, y1, m1, d1, x。意为在<y0, m0, d0>到<y1, m1, d1>时间内,小鲨鱼担任了职务x。(1 <= x <= 10^9)
给定的时间皆合法,且起始日期小于或等于截止日期。职务x是唯一的。

接下来是一个整数q,代表q次查询。(1 <= q <= 10^4)
接下来的q行,每一行为三个整数<y, m, d>,代表查询的日期。时间皆合法。

Output

每一次查询输出一行结果。
首先输出一个整数n,代表此时小鲨鱼担任的职务数。(n可以为0)
接下来是n个整数,代表小鲨鱼担任的职务。职务列表保持升序。

Input示例

4
2000 01 01    2000 01 01    111
2000 01 02    2001 02 02    222
2000 01 28    2000 02 29    333
2000 01 29    2000 02 28    444
4
2000 01 01
2000 01 02
2000 01 28
2000 02 29

Output示例

0
1 222
2 222 333
2 222 333

贪心+模拟只忽略小于一个自然月、然后。。等于的也忽略了WA半天、
 1 #include <algorithm>
 2 #include <cstdio>
 3
 4 inline void read(int &x)
 5 {
 6     x=0; register char ch=getchar();
 7     for(; ch>‘9‘||ch<‘0‘; ) ch=getchar();
 8     for(; ch>=‘0‘&&ch<=‘9‘; ch=getchar()) x=x*10+ch-‘0‘;
 9 }
10 const int N(1e5+5);
11 int y0,m0,d0,y1,m1,d1,k;
12 int cnt,tmp,ans[N];
13 struct Work {
14     int ly,lm,ld,ry,rm,rd,kind;
15     Work(int ly=0,int lm=0,int ld=0,int ry=0,int rm=0,int rd=0,int kind=0):
16         ly(ly),lm(lm),ld(ld),ry(ry),rm(rm),rd(rd),kind(kind){}
17     bool operator < (const Work &x)const
18     {
19         if(ly!=x.ly) return ly<x.ly;
20         else if(lm!=x.lm) return lm<x.lm;
21         else if(ld!=x.ld) return ld<x.ld;
22         else if(ry!=x.ry) return ry<x.ry;
23         else if(rm!=x.rm) return rm<x.rm;
24         else if(rd!=x.rd) return rd<x.rd;
25     }
26 }job[N<<1];
27
28 inline bool check()
29 {
30     if(y0==y1) return (m0+1==m1&&d0>d1)||m0==m1;
31     else return (y0+1==y1&&m0==12&&m1==1&&d0>d1);
32 }
33 inline bool if_break(Work x)
34 {
35     if(x.ly>y0) return 1;
36     else if(x.ly==y0&&x.lm>m0) return 1;
37     else if(x.ly==y0&&x.lm==m0&&x.ld>d0) return 1;
38     return 0;
39 }
40 inline bool judge(Work x)
41 {
42     if(x.ry<y0) return 0;
43     else if(x.ry==y0)
44            if(x.rm<m0) return 0;
45            else if(x.rm==m0)
46                      if(x.rd<d0) return 0;
47     return 1;
48 }
49
50 int Presist()
51 {
52     int n,q; read(n);
53     for(int i=1; i<=n; ++i)
54     {
55         read(y0),read(m0),read(d0);
56         read(y1),read(m1),read(d1); read(k);
57         if(!check()) job[++cnt]=Work(y0,m0,d0,y1,m1,d1,k);
58     }
59     std::sort(job+1,job+cnt+1);
60     for(read(q); q--; tmp=0)
61     {
62         read(y0),read(m0),read(d0);
63         for(int i=1; i<=cnt; ++i)
64         {
65             if(if_break(job[i])) break;
66             if(judge(job[i])) ans[++tmp]=job[i].kind;
67         }
68         if(!tmp) puts("0");
69         else
70         {
71             printf("%d ",tmp); std::sort(ans+1,ans+tmp+1);
72             for(int i=1; i<tmp; ++i) printf("%d ",ans[i]);
73             printf("%d\n",ans[tmp]);
74         }
75     }
76     return 0;
77 }
78
79 int Aptal=Presist();
80 int main(int argc,char*argv[]){;}
时间: 2024-08-28 19:51:40

51Nod——T 1631 小鲨鱼在51nod小学的相关文章

51nod 1631 小鲨鱼在51nod小学

基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B,意为小鲨鱼在[A, B]时间内,担任了某职务(inclusively). 现在给定小鲨鱼的职务履历表,你可以高效的给出小鲨鱼在某天担任了哪些职务吗? p.s. 由于小鲨鱼担任的职务太多,所有任期小于一个自然月的职务都忽略不计.(如1月1日~2月1日为一个自然月,

51nod 1831:小C的游戏

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1831 题目大意:有堆大小为$n$的石子,每人每次可以从中取走一个或留下$d$($d|n$,$d$不为$1$或$n$)个石子,最后一个取石子的为输. 暴力 注意$n=0$时也为输,复杂度$O($可过$)$(滑稽. 代码如下: 1 #include <cstdio> 2 using namespace std; 3 typedef long long ll; 4

关注这一个小程序 同时拥有6个小程序的功能

在我们日常生活中,数据查询服务越来越多,比如快递查询.黄页查询,如果出国旅游,英语不好的人难免对话成问题,吃饭点餐也可能带来误会. 这款小程序可以解决上述的烦忧,扫描下面二维码,关注. 首先打开的首页 快递查询 支持2种录入方式.文本录入或快递单条形码扫描 电话黄页 记录一些紧急电话和常用电话,而且可以直接拨打 单位转换 主要提供计量单位间的转换,如:长度.面积.体积.时间等.适用于辅助中小学生 汇率转换 可以查看人民币和不同币种间的汇率转换. 以上功能是这个小程序的基本功能,它其实还可以同时打

java小项目之:坦克大战,90后的集体回忆杀!

坦克大战小项目! 在小学初中的时候,我相信我们都曾经沉迷于一种玩具“红白机”,这应该是80后90后的童年回忆.用绝对好好学习的誓言,求着父母买一台.自己学会插在电视机上,再和小伙伴一起买一些游戏卡带,便能在周末和课余时间,趁着父母不在厮杀一整天. 魂斗罗,超级玛丽,冒险岛,热血格斗,忍者神龟等等数不清的游戏,在我们夜以继日的奋斗下,被我们玩得十分娴熟.各种技能,小操作信手拈来.但在我的记忆中,有一款游戏我从来没通关过,那就是今天这文章的主角<坦克大战>. <坦克大战>应该也是众多游

浅谈一类积性函数的前缀和(转载)

本文转自:http://blog.csdn.net/skywalkert/article/details/50500009 另外,莫比乌斯反演和杜教筛其他可转到 http://blog.leanote.com/post/totziens/%E8%8E%AB%E6%AF%94%E4%B9%8C%E6%96%AF%E5%8F%8D%E6%BC%94 写在前面 笔者在刷题过程中遇到一些求积性函数前缀和的问题,其中有一类问题需要在低于线性时间复杂度的算法,今天就来浅析一下这类问题的求解方法,当作以后讲课

Java学习(九)

·类和对象的扩展 class Human { String name; int age; Human(){} Human(String name,int age){ this.name = name; this.age = age; } viod walk(){ System.out.println(name + "慢慢走"); } } class Child extends Human{ String schoolName; Child(String name,int age,Str

ubuntu15.04中安装mysql和mysql-workbench

本文主要解说mysql在ubuntu中的安装和使用.以及mysql workbench的安装和使用.mysql是一个开源的数据库软件.甲骨文的一个产品,是一个性能较好的数据库软件.mysql workbench是一款专为MySQL设计的ER/数据库建模工具. 1.mysql的安装 这里介绍最简单的方式通过apt-get安装. 安装命令: sudo apt-get update sudo apt-get install mysql-server mysql-client 安装过程仅仅须要设置roo

高中生活-第9篇-开学之初的“失足”囧事,&quot;刻舟求剑&quot;导致腿折了

时间过得好快啊,上次发表"高中生活-第8篇:夏天的空调,冬天的味道"是2014年9月30日,一转眼,就是一年啊. 我自己以为,很多人可能都以为,我又半途而废了,实则不是哦~ 行百里者半九十,大部分人的困境,我可是要努力去突破的~ 今天有空,同时看到了以前列好的"标题" ,就着手写了. 很多人可能好奇,我为啥喜欢写这些又不专业又不有趣的事. 我是这么看的,高中生活是我人生中最重要的第3个阶段,初中算是1个,暂时不想去写. 高中生活,最值得写是因为,高中3年,2005~

这样的大学

不知不觉,大学三年已经过去了,时间真的好快,人生苦短,我已经22岁了.我写这篇博客,不仅是为了完成作业,也是回首总结自己的整个大学生活. 我出生农村,父母都是农民出生.母亲初中文化,父亲高中文化.后来母亲当了家庭主妇,父亲做了商人.可以说,从小到大,我的家庭并没有那些文化熏陶之类的东西,并不是什么书香门第,也没有人教我怎么学,没有像这个博客C[1]的博主一样有什么父亲的书橱,经济条件的约束下也没有像这个博客A[2]的博主一样,小学毕业的暑假被家人送到市科委的计算机培训班进行计算机的启蒙,家庭对学