hdu-----2491Priest John's Busiest Day(2008 北京现场赛G)
Priest John's Busiest Day
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1420 Accepted Submission(s): 415
Problem Description
John is the only priest in his town. October 26th is the John's busiest day in a year because there is an old legend in the town that the couple who get married on that day will be forever blessed by the God of Love. This year N couples plan to get married on the blessed day. The i-th couple plan to hold their wedding from time Si to time Ti. According to the traditions in the town, there must be a special ceremony on which the couple stand before the priest and accept blessings. Moreover, this ceremony must be longer than half of the wedding time and can’t be interrupted. Could you tell John how to arrange his schedule so that he can hold all special ceremonies of all weddings? Please note that: John can not hold two ceremonies at the same time. John can only join or leave the weddings at integral time. John can show up at another ceremony immediately after he finishes the previous one.
Input
The input consists of several test cases and ends with a line containing a zero. In each test case, the first line contains a integer N ( 1 ≤ N ≤ 100,000) indicating the total number of the weddings. In the next N lines, each line contains two integers Si and Ti. (0 <= Si < Ti <= 2147483647)
Output
For each test, if John can hold all special ceremonies, print "YES"; otherwise, print “NO”.
Sample Input
3
1 5
2 4
3 6
2
1 4
5 6
0
Sample Output
NO
YES
Source
题意:
小镇有n场婚礼在一天之内进行,第i场婚礼的开始时间为s,结束时间为t,在每一场婚礼中,有一个重要的仪式。即牧师给与两位新人传达主的祝福,对于第i场婚礼,祝福仪式可以在[s , t]中任何时候举行,但是必须超过总时间的一半以上。
小镇只有一位牧师,所有的祝福仪式都必须要他在场吗。同时,牧师必须在整数时刻开始或者结束祝福仪式,不过他可以在结束之后立刻开始另一场。
现在给你所有的婚礼的信息请问是否能够安排好一个祝福仪式的顺序,使得牧师能够给所有的新人带去幸福......
现在给你所有婚礼的信息,请问是否能够安排好一个祝福仪式的顺序,使得牧师能够给所有新人带去幸福...
自己写了个搓代码:
先展示一下大神的代码把!...
然后再看弱屌的代码....
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<algorithm>
5 using namespace std;
6 const int maxn = 100100;
7 struct tnode
8 {
9 int s,e;
10 int ms,me;
11 int keyinterval;
12 int id;
13 }c[maxn];
14
15 bool operator < (const tnode &a , const tnode &b)
16 {
17 return (a.ms <b.ms ||(a.ms==b.ms&&a.me<b.me));
18 }
19 int n , i;
20 void init()
21 {
22 for(i=0 ; i<n ;i++ ){
23 scanf("%d%d",&c[i].s,&c[i].e);
24 c[i].id=i;
25 c[i].keyinterval = (c[i].e - c[i].s +2)/2 ;
26 c[i].ms=c[i].s+(c[i].e - c[i].s -1)/2;
27 c[i].me=c[i].s+1;
28 if((c[i].e-c[i].s)%2==0)
29 ++c[i].me;
30 }
31 sort(c,c+n);
32 }
33 bool work()
34 {
35 int now_s , now_e ,last_e;
36 last_e=0;
37 for(int i=0 ; i<n ;i++)
38 {
39 now_s =c[i].s;
40 if(now_s<last_e) now_s=last_e;
41 now_e=now_s+c[i].keyinterval;
42 if(now_e>c[i].e) return false;
43 last_e = now_e;
44 }
45 return true ;
46 }
47
48 int main()
49 {
50 while(scanf("%d",&n),n!=0)
51 {
52 init();
53 if(work())
54 printf("YESn");
55 else
56 printf("NOn");
57 }
58 return 0;
59 }
运用STL之后,速度更
搓,空间开销也增大了不少....
代码:
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<vector>
5 #include<algorithm>
6 using namespace std;
7 const int maxn = 100100;
8 struct tnode
9 {
10 int s,e;
11 int ms,me;
12 int keyinterval;
13 int id;
14 bool operator < (const tnode &b) const
15 {
16 return (ms <b.ms ||(ms==b.ms&&me<b.me));
17 }
18 };
19
20 int n , i;
21 tnode cc;
22 vector<tnode>c;
23 void init()
24 {
25 c.clear();
26 for(i=0 ; i<n ;i++ ){
27 scanf("%d%d",&cc.s,&cc.e);
28 cc.id=i;
29 cc.keyinterval = (cc.e - cc.s +2)/2 ;
30 cc.ms=cc.s+(cc.e - cc.s -1)/2;
31 cc.me=cc.s+1;
32 if((cc.e-cc.s)%2==0)
33 ++cc.me;
34 c.push_back(cc);
35 }
36 sort(c.begin(),c.end());
37 }
38 bool work()
39 {
40 int now_s , now_e ,last_e;
41 last_e=0;
42 for(int i=0 ; i<n ;i++)
43 {
44 now_s =c[i].s;
45 if(now_s<last_e) now_s=last_e;
46 now_e=now_s+c[i].keyinterval;
47 if(now_e>c[i].e) return false;
48 last_e = now_e;
49 }
50 return true ;
51 }
52
53 int main()
54 {
55 while(scanf("%d",&n),n!=0)
56 {
57 init();
58 if(work())
59 printf("YESn");
60 else
61 printf("NOn");
62 }
63 return 0;
64 }
然后自己有写了一次..........!
代码:
手动的扩栈....
#program comment (linker ,"/STACK :102400000 102400000")
1 #include<cstdio>
2 #include<cstring>
3 #include<cstdlib>
4 #include<iostream>
5 #include<algorithm>
6 #pragma comment(linker, "/STACK:102400000,102400000") //由于用内分装之后会出现溢栈的情况,所以手动扩栈
7 using namespace std;
8
9 const int maxn =100100 ;
10
11 struct tnode
12 {
13 int s,e;
14 int ms,me;
15 int mid;
16 bool operator < (const tnode b) const
17 {
18 return (ms<b.ms||(ms==b.ms)&&me<b.me);
19 }
20 };
21 class node
22 {
23 private:
24 tnode str[maxn];
25 int i;
26 public :
27 int n;
28 void init();
29 bool work();
30 };
31
32 void node::init()
33 {
34 for(i=0;i<n;i++)
35 {
36 scanf("%d%d",&str[i].s,&str[i].e) ;
37 str[i].mid=(str[i].e-str[i].s)/2 +1 ;
38 str[i].ms= str[i].s+(str[i].e-str[i].s-1)/2 ;
39 str[i].me=str[i].s+1 ;
40 if((str[i].e-str[i].s)%2==0) str[i].me++;
41 }
42 sort(str,str+n);
43 }
44 bool node::work()
45 {
46 int temp_s,temp_e,last_e=0;
47 for( i=0 ; i<n ; i++ )
48 {
49 temp_s=str[i].s;
50 if(temp_s<last_e) temp_s=last_e;
51 temp_e = temp_s+str[i].mid;
52 if(temp_e>str[i].e) return false;
53 last_e=temp_e;
54 }
55 return true ;
56 }
57 int main()
58 {
59 node a;
60 while(scanf("%d",&a.n)!=EOF&&a.n)
61 {
62 a.init();
63 if(a.work())printf("YESn");
64 else printf("NOn");
65 }
66 return 0;
67 }
- openFileDialog的Filter属性设置
- dedecms调用当前栏目的子栏目怎么操作
- dedecms如何增加自定义字段
- dedecms如何快速删除跳转的文章(记得清空内容回收站)
- Javascript构造函数
- 帝国cms调用栏目自定义字段(栏目简介)如何操作
- dedecms手机站图片错误的解决方法
- 可以搜索到DedeCms后台文章列表文档id吗?或者快速定位id编辑文章
- 常用工具整理
- jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
- 如何修改dedecms专题目录默认名称special
- 普里姆(Prim)算法
- dedecms用keyword标签调用含有某一关键词的文章
- 红黑树算法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C# EmguCV图像处理实例
- VSCode配置Python环境指南
- 【Python】Python爬虫爬取中国天气网(一)
- C# semaphore的使用-2
- [打造自己的监控系统]使用Django批量监控Oracle Job运行情况
- C#多线程--信号量(Semaphore)
- zabbix微信报警设置
- C#中调用python
- Emgucv视频处理--进阶篇
- C#中Lambda表达式总结
- [打造自己的监控系统]使用Django批量监控Oracle长会话
- C# ref实例讲解
- [Oracle 故障处理]记一次undo表空间使用率99%的问题
- C# 队列(Queue)
- 记住没:永远不要在 MySQL 中使用 UTF-8!