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]中任何时候举行,但是必须超过总时间的一半以上。
          小镇只有一位牧师,所有的祝福仪式都必须要他在场吗。同时,牧师必须在整数时刻开始或者结束祝福仪式,不过他可以在结束之后立刻开始另一场。
现在给你所有的婚礼的信息请问是否能够安排好一个祝福仪式的顺序,使得牧师能够给所有的新人带去幸福......
          现在给你所有婚礼的信息,请问是否能够安排好一个祝福仪式的顺序,使得牧师能够给所有新人带去幸福...
 
 
自己写了个搓代码:
先展示一下大神的代码把!...
然后再看弱屌的代码....
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = ;
struct tnode
{
int s,e;
int ms,me;
int keyinterval;
int id;
}c[maxn]; bool operator < (const tnode &a , const tnode &b)
{
return (a.ms <b.ms ||(a.ms==b.ms&&a.me<b.me));
}
int n , i;
void init()
{
for(i= ; i<n ;i++ ){
scanf("%d%d",&c[i].s,&c[i].e);
c[i].id=i;
c[i].keyinterval = (c[i].e - c[i].s +)/ ;
c[i].ms=c[i].s+(c[i].e - c[i].s -)/;
c[i].me=c[i].s+;
if((c[i].e-c[i].s)%==)
++c[i].me;
}
sort(c,c+n);
}
bool work()
{
int now_s , now_e ,last_e;
last_e=;
for(int i= ; i<n ;i++)
{
now_s =c[i].s;
if(now_s<last_e) now_s=last_e;
now_e=now_s+c[i].keyinterval;
if(now_e>c[i].e) return false;
last_e = now_e;
}
return true ;
} int main()
{
while(scanf("%d",&n),n!=)
{
init();
if(work())
printf("YES\n");
else
printf("NO\n");
}
return ;
}

运用STL之后,速度更搓,空间开销也增大了不少....

代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = ;
struct tnode
{
int s,e;
int ms,me;
int keyinterval;
int id;
bool operator < (const tnode &b) const
{
return (ms <b.ms ||(ms==b.ms&&me<b.me));
}
}; int n , i;
tnode cc;
vector<tnode>c;
void init()
{
c.clear();
for(i= ; i<n ;i++ ){
scanf("%d%d",&cc.s,&cc.e);
cc.id=i;
cc.keyinterval = (cc.e - cc.s +)/ ;
cc.ms=cc.s+(cc.e - cc.s -)/;
cc.me=cc.s+;
if((cc.e-cc.s)%==)
++cc.me;
c.push_back(cc);
}
sort(c.begin(),c.end());
}
bool work()
{
int now_s , now_e ,last_e;
last_e=;
for(int i= ; i<n ;i++)
{
now_s =c[i].s;
if(now_s<last_e) now_s=last_e;
now_e=now_s+c[i].keyinterval;
if(now_e>c[i].e) return false;
last_e = now_e;
}
return true ;
} int main()
{
while(scanf("%d",&n),n!=)
{
init();
if(work())
printf("YES\n");
else
printf("NO\n");
}
return ;
}

然后自己有写了一次..........!

代码:

手动的扩栈....

#program comment (linker ,"/STACK :102400000  102400000")

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#pragma comment(linker, "/STACK:102400000,102400000") //由于用内分装之后会出现溢栈的情况,所以手动扩栈
using namespace std; const int maxn = ; struct tnode
{
int s,e;
int ms,me;
int mid;
bool operator < (const tnode b) const
{
return (ms<b.ms||(ms==b.ms)&&me<b.me);
}
};
class node
{
private:
tnode str[maxn];
int i;
public :
int n;
void init();
bool work();
}; void node::init()
{
for(i=;i<n;i++)
{
scanf("%d%d",&str[i].s,&str[i].e) ;
str[i].mid=(str[i].e-str[i].s)/ + ;
str[i].ms= str[i].s+(str[i].e-str[i].s-)/ ;
str[i].me=str[i].s+ ;
if((str[i].e-str[i].s)%==) str[i].me++;
}
sort(str,str+n);
}
bool node::work()
{
int temp_s,temp_e,last_e=;
for( i= ; i<n ; i++ )
{
temp_s=str[i].s;
if(temp_s<last_e) temp_s=last_e;
temp_e = temp_s+str[i].mid;
if(temp_e>str[i].e) return false;
last_e=temp_e;
}
return true ;
}
int main()
{
node a;
while(scanf("%d",&a.n)!=EOF&&a.n)
{
a.init();
if(a.work())printf("YES\n");
else printf("NO\n");
}
return ;
}
 
 

hdu-----2491Priest John's Busiest Day(2008 北京现场赛G)的更多相关文章

  1. HDUOJ-------2493Timer(数学 2008北京现场赛H题)

    Timer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. HDUOJ--------A simple stone game(尼姆博弈扩展)(2008北京现场赛A题)

    A simple stone game                                                                                  ...

  3. HDUOJ----2485 Destroying the bus stations(2008北京现场赛A题)

    Destroying the bus stations                                                                          ...

  4. HDU 5122 K.Bro Sorting(2014北京区域赛现场赛K题 模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5122 解题报告:定义一种排序算法,每一轮可以随机找一个数,把这个数与后面的比这个数小的交换,一直往后判 ...

  5. HDU 5119 Happy Matt Friends(2014北京区域赛现场赛H题 裸背包DP)

    虽然是一道还是算简单的DP,甚至不用滚动数组也能AC,数据量不算很大. 对于N个数,每个数只存在两个状态,取 和 不取. 容易得出状态转移方程: dp[i][j] = dp[i - 1][j ^ a[ ...

  6. hdu 5038 (2014北京网络赛G 排序水题)

    题意:有n个数字,带入10000 - (100 - ai) ^ 2公式得到n个数,输出n个数中频率最大的数,如果有并列就按值从小到大都输出输出,如果频率相同的数字是全部的n个数,就输出Bad....题 ...

  7. hdu 5120(求两个圆环相交的面积 2014北京现场赛 I题)

    两个圆环的内外径相同 给出内外径 和 两个圆心 求两个圆环相交的面积 画下图可以知道 就是两个大圆交-2*小圆与大圆交+2小圆交 Sample Input22 30 00 02 30 05 0 Sam ...

  8. hdu 5122 (2014北京现场赛 K题)

    把一个序列按从小到大排序 要执行多少次操作 只需要从右往左统计,并且不断更新最小值,若当前数为最小值,则将最小值更新为当前数,否则sum+1 Sample Input255 4 3 2 155 1 2 ...

  9. hdu 5112 (2014北京现场赛 A题)

    给出某个时刻对应的速度 求出相邻时刻的平均速度 输出最大值 Sample Input23 // n2 2 //t v1 13 430 31 52 0 Sample OutputCase #1: 2.0 ...

随机推荐

  1. POSTMAN中各种请求方式的区别

    1.form-data:  就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开.既可以上传键值对,也可以上传文件.当上传的字段是文件 ...

  2. MyBatis 多表联合查询及优化 以及自定义返回结果集

    下面就来说一下 mybatis 是通过什么来实现多表联合查询的.首先看一下表关系,如图: 这 里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了 ...

  3. QT 加载c语言编译的动态库

    QLibrary lib("./libprint.so");//库的路径if(lib.load()){    typedef void(*AddFunction)(char *st ...

  4. ubuntu下导入kali源

    Kali-Linux之前的渗透神器BackTrack是基于Ubuntu的,界面比较友好,字体渲染看起来也比较舒服(也可能是本人用惯了 Ubuntu的缘故).后来官方终止BackTrack,开发Kali ...

  5. ServiceStack.OrmLite 6 学习笔记 查

    查 根据id var result = db.SingleById<Poco>(1); 根据字段 var customer = db.Single<Customer>(new ...

  6. Binding的源与路径

    1.把控件作为Binding的源 例子:拖动Slider,输入框中的值也会跟着改变,或在输入框中输入数值,滑动条也会自动移动 <Window x:Class="把控件作为Binding ...

  7. MYSQL中的SELECT查询时进行运算

    SELECT在mysql中是查询表中的数据的作用,但也可以在查询的时候直接进行运算,然后返回查询后的结果 比如 )) FROM username2 其中的IFNULL函数是对adven数据进行判断,若 ...

  8. iOS - Sign up/in 注册/登录

    1.Sign up/in 1.1 用户登录安全原则 不能在网络上传输用户隐私数据的明文. 不能在本地和服务器上存储用户隐私数据的明文. 1.2 用户登录流程 登录成功之后,应该跳转视图控制器到主页. ...

  9. iOS - UIApplication

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIApplication : UIResponder @available(iOS 2.0, *) public ...

  10. 内部使用final参数的原因

    局部内部类(即:定义在方法中的内部类),访问方法中的局部变量 : 局部变量的生命周期与对象的生命周期的不一致性!方法在执行完方法的局部变量就消失,而内部类如果有引用还是存在的,那么将找不到变量.此时设 ...