糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 51nod 1631 小鲨鱼在51nod小学

51nod 1631 小鲨鱼在51nod小学

时间:2019-02-25 09:53:24

相关推荐

51nod 1631 小鲨鱼在51nod小学

基准时间限制:1秒 空间限制:131072KB 分值: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示例

4200001012000010111120000102200102220000128200002293332000012920000228444420000101200001022000012820000229

Output示例

0122222223332222333

大暴力题 妈的终于A了。。 我屮艸芔茻。。 屠龙宝刀点击就送

#include <algorithm>#include <cstdio>#include <cctype>#define N 100005using namespace std;inline void Read(int &x){register char ch=getchar();for(x=0;!isdigit(ch);ch=getchar());for(;isdigit(ch);x=x*10+ch-'0',ch=getchar());}struct node{int y0,m0,d0,y1,m1,d1,x;bool operator<(node a)const{return x<a.x;}}Joob[N];struct nodee{int y,m,d;}Query[N];int Que[N],h=0,cnt=0,n,m;int main(int argc,char *argv[]){scanf("%d",&n);for(int i=1;i<=n;++i){Read(Joob[++cnt].y0);Read(Joob[cnt].m0);Read(Joob[cnt].d0);Read(Joob[cnt].y1);Read(Joob[cnt].m1);Read(Joob[cnt].d1);Read(Joob[cnt].x);if(Joob[cnt].y0>Joob[cnt].y1) cnt--;else if(Joob[cnt].m0+1==Joob[cnt].m1&&Joob[cnt].d0>Joob[cnt].d1&&Joob[cnt].y0==Joob[cnt].y1) cnt--;else if(Joob[cnt].m0==Joob[cnt].m1&&Joob[cnt].y0==Joob[cnt].y1) cnt--;else if(Joob[cnt].y0+1==Joob[cnt].y1&&Joob[cnt].m0==12&&Joob[cnt].m1==1&&Joob[cnt].d0>Joob[cnt].d1) cnt--;}sort(Joob+1,Joob+1+cnt);scanf("%d",&m);for(int i=1;i<=m;++i) Read(Query[i].y),Read(Query[i].m),Read(Query[i].d);for(int i=1;i<=m;++i){for(int j=1;j<=cnt;++j){if(Joob[j].y0==Query[i].y&&Joob[j].m0==Query[i].m&&Joob[j].d0==Query[i].d) Que[++h]=Joob[j].x;else if(Joob[j].y1==Query[i].y&&Joob[j].m1==Query[i].m&&Joob[j].d1==Query[i].d) Que[++h]=Joob[j].x;else if(Joob[j].y0<Query[i].y&&Query[i].y<Joob[j].y1) Que[++h]=Joob[j].x;else{bool flag=0;if(Joob[j].y0==Query[i].y){if(Joob[j].m0<Query[i].m&&Query[i].m<Joob[j].m1) Que[++h]=Joob[j].x,flag=1;else if(Joob[j].m0==Query[i].m&&Joob[j].d0<=Query[i].d) Que[++h]=Joob[j].x,flag=1;else if(Joob[j].y1>Query[i].y&&((Joob[j].m0<Query[i].m)||(Joob[j].m0==Query[i].m&&Joob[j].d0<=Query[i].d))) Que[++h]=Joob[j].x,flag=1;}if(Joob[j].y1==Query[i].y&&!flag){if(Joob[j].m0<Query[i].m&&Query[i].m<Joob[j].m1) Que[++h]=Joob[j].x;else if(Joob[j].m1==Query[i].m&&Joob[j].d1>=Query[i].d) Que[++h]=Joob[j].x;else if(Query[i].y>Joob[j].y0&&((Joob[j].m1>Query[i].m)||(Joob[j].m1==Query[i].m&&Joob[j].d1>=Query[i].d))) Que[++h]=Joob[j].x;}}}printf("%d",h);for(int p=1;p<=h;++p) printf(" %d",Que[p]);h=0;printf("\n");}return 0;}

如果觉得《51nod 1631 小鲨鱼在51nod小学》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。