HDU 5214 Movie (赛码"BestCoder"杯中国大学生程序设计冠军赛A题)

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

【题目链接】click here~~

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

解题思路】 

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

【官方解题报告】首先我们考虑如何选择最左边的一个区间,假设最左边的区间标号是i, 那选择的另外两个区间的左端点必定要大于Ri,若存在i之外的j, 满足Rj<Ri, 那么另外两个区间的选择余地必定不会减少,因此,为了使另外两个区间有尽可能多的选择,我们选择一个右端点最小的区间作为最左边的区间是最好的,同理,我们选择一个左端点最大的区间为最右边的区间,也将提供最多的选择,确定了这两个区间之后,只需判断是否存在一个区间位于它们中间且不交叉即可

本题的取模值十分特殊,用unsigned int的自然溢出可以达到同样的效果,时间复杂度O(N)

代码:

#include <bits/stdc++.h>
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<n; i++)
        {
            Map[i].pre=Map[i-1].pre*a+b;
            Map[i].last=Map[i-1].last*c+d;
        }
        for(int i=0; i<n; i++)
        {
            if(Map[i].pre>Map[i].last) swap(Map[i].pre,Map[i].last);//全部处理之后再交换!
            if(Map[i].pre>maxx) maxx=Map[i].pre;//左端点最大的区间作为最右边的区间
            if(Map[i].last<minn) minn=Map[i].last;//右端点最小的区间作为最左边的区间
        }
        for(int i=0; i<n; i++)
        {
            if(Map[i].last<maxx&&Map[i].pre>minn)
            {
                puts("YES");
                flag=true;
                break;
            }
        }
        if(!flag) puts("NO");
    }
    return 0;
}
时间: 2024-12-05 21:05:23

HDU 5214 Movie (赛码"BestCoder"杯中国大学生程序设计冠军赛A题)的相关文章

ACM 五一杭电赛码&quot;BestCoder&quot;杯中国大学生程序设计冠军赛小记

对于这项曾经热爱的竞赛,不得不说这是我最后一年参加ACM比赛了,所以要珍惜每一次比赛的机会. 五一去杭电参加了赛码"BestCoder"杯中国大学生程序设计冠军赛,去的队伍包括了今年19支World final的队伍,几乎是全国最强的46所学校各出了一个代表队,十分感谢学校给了我这个大三的老年血手这次去比赛的机会. 比赛在5.2一天内完成,上午的热身赛居然是上一场Bestcoder的原题= =.虽然我们三个人都没做过...不过我还是水水的写了前两道题. 在中午的悲惨淋雨后,下午正赛开始

赛码&quot;BestCoder&quot;杯中国大学生程序设计冠军赛

渣渣一枚 总共做了4个题目.先总结下吧.题目质量很高. 题目链接 1001 这个题目第一眼就是hdu之前的题目今年暑假不AC.只选三个,那么就是左右两边贪心取优. #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #define MOD 4294967296 using namespace std; typedef unsigned int LL; int T; i

(赛码&quot;BestCoder&quot;杯中国大学生程序设计冠军赛)GCD

GCD Accepts: 433 Submissions: 1753 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem Description In mathematics, the greatest common divisor (gcd) of two or more integers, when at least one of them is not zero

赛码&quot;BestCoder&quot;杯中国大学生程序设计冠军赛1009——邻接表+并查集——Exploration

Problem Description Miceren likes exploration and he found a huge labyrinth underground! This labyrinth has N caves and some tunnels connecting some pairs of caves. There are two types of tunnel, one type of them can be passed in only one direction a

赛码&quot;BestCoder&quot;杯中国大学生程序设计冠军赛1001——Movie

Problem Description Cloud and Miceren like watching movies. Today, they want to choose some wonderful scenes from a movie. A movie has N scenes can be chosen, and each scene is associate with an interval [L, R]. L is the beginning time of the scene a

&quot;BestCoder&quot;杯中国大学生程序设计冠军赛 HDU 5221 Occupation

题目链接~~> 做题感悟 :区域赛过后就没写过树剖 ,只记得思想,比赛时想到了,但是只打代码就打了半个多小时(真是醉了!!),然后就是不断的调试代码,悲催的是调了一个多小时也没调出来..... 解题思路:这题只要想到某个节点的子树的所有节点编号都大于此节点的编号(在线段树中)且是连续的,那么我们只要深搜的时候记录一下子树最大的一个节点的时间戳(在线段树中的编号),只要我们利用一个节点的进去的时间戳和出去的时间戳就可以对这个节点的子树操作了(CF上有一个处理子树类似的题),其它的两个操作就 so

HDU 5914 Triangle 【构造】 (2016中国大学生程序设计竞赛(长春))

Triangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description Mr. Frog has n sticks, whose lengths are 1,2, 3?n respectively. Wallice is a bad man,

HDU 5912 Fraction 【模拟】 (2016中国大学生程序设计竞赛(长春))

Fraction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description Mr. Frog recently studied how to add two fractions up, and he came up with an evil ide

HDU 5923 Prediction(2016 CCPC东北地区大学生程序设计竞赛 Problem B)

题目链接  2016 CCPC东北地区大学生程序设计竞赛 B题 题意  给定一个无向图和一棵树,树上的每个结点对应无向图中的一条边,现在给出$q$个询问, 每次选定树中的一个点集,然后真正被选上的是这些点以及这些点的所有祖先. 只有标号在树中真正被选上的点代表的这些原图中的边是存在的,这样就构成了一个新的图.求这个图的连通块个数. dfs整棵树,记$f[x]$为若$x$以及$x$的所有祖先被选上,那么构成的新的图的并查集) 这个实现比较简单,搜索的时候打上标记,回来的时候撤销即可. 这样预处理的