设为首页 加入收藏

TOP

HDU 5214 Movie (赛码"BestCoder"杯中国大学生程序设计冠军赛A题)
2015-11-21 01:03:22 来源: 作者: 【 】 浏览:1
Tags:HDU 5214 Movie 赛码 " BestCoder" 中国 大学生 程序设计 冠军赛

五一有幸跟着老师去了一次杭电,求虐之行,坐等清华北大等巨巨AK全场,总结经验,激励前进!

【题目链接】click here~~

题目大意】在多个不确定区间里面,问能否选出三个互不相交的区间

解题思路】

ps:当时是hjs敲题,敲完之后三个人都检查了一遍,发现没有问题,但是交上去却CE了,后面于是各种调,各种错误,最后发现把取模去掉,直接判断一下是否存在一个区间位于已经出来的区间中间且不交叉即可,悲剧。。。

【官方解题报告】首先我们考虑如何选择最左边的一个区间,假设最左边的区间标号是i, 那选择的另外两个区间的左端点必定要大于Ri,若存在i之外的j, 满足Rj 本题的取模值十分特殊,用unsigned int的自然溢出可以达到同样的效果,时间复杂度O(N)

代码:

?

#include 
  
   
using namespace std;
const int N=1e7+10;
const int inf=0x3f3f3f3f;
struct node
{
    unsigned int pre,last;
} Map[N];
int main()
{
    int T,n;
    unsigned int L1,R1,a,b,c,d,maxx,minn;
    bool flag;
    scanf("%d",&T);
    while(T--)
    {
        flag=false;
        cin>>n>>L1>>R1>>a>>b>>c>>d;
        maxx=0;
        minn=inf;
        Map[0].pre=L1;
        Map[0].last=R1;
        for(int i=1; i
   
    Map[i].last) swap(Map[i].pre,Map[i].last);//全部处理之后再交换! if(Map[i].pre>maxx) maxx=Map[i].pre;//左端点最大的区间作为最右边的区间 if(Map[i].last
    
     minn) { puts("YES"); flag=true; break; } } if(!flag) puts("NO"); } return 0; } 
    
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ - 1159 - Palindrome (LCS +.. 下一篇POJ 1088滑雪 记忆化搜索

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: