• 贪心 赛码 1001 Movie


    题目传送门

     1 /*
     2     贪心:官方题解:
     3         首先我们考虑如何选择最左边的一个区间
     4         假设最左边的区间标号是i, 那选择的另外两个区间的左端点必定要大于Ri
     5         若存在i之外的j, 满足Rj<Ri, 那么另外两个区间的选择余地必定不会减少
     6         因此,为了使另外两个区间有尽可能多的选择,我们选择一个右端点最小的区间作为最左边的区间是最好的
     7         同理,我们选择一个左端点最大的区间作为最右边的区间,也将提供最多的选择
     8         确定了这两个区间之后,只需判断是否存在一个区间位于它们中间且不交叉即可
     9         本题的取模值十分特殊,用unsigned int的自然溢出可以达到同样的效果
    10         时间复杂度O(N)
    11     解题关键:if (mn_r < node[i].l && node[i].r < mx_l),存在这样的一个区间满足条件就YES!
    12     反思:首先没有想到贪心的投机方法,用暴力DFS搜索超时,unsigned int的范围: 0 ~ 4294967295 这个取模自然溢出也是醉了:)
    13     补充:HDOJ 2037 今年暑假不AC 升级版
    14 */
    15 #include <cstdio>
    16 #include <iostream>
    17 #include <algorithm>
    18 #include <cstring>
    19 #include <string>
    20 #include <map>
    21 #include <vector>
    22 #include <set>
    23 #include <cmath>
    24 #include <queue>
    25 using namespace std;
    26 const int MAXN = 10000000 + 10;
    27 const long long  INF = 0x3f3f3f3f;
    28 struct Node
    29 {
    30     unsigned int l, r;
    31 }node[MAXN];
    32 
    33 int main(void)        //赛码 1001 Movie
    34 {
    35     //freopen ("A.in", "r", stdin);
    36 
    37     int t, n;
    38     unsigned int a, b, c, d;
    39     scanf ("%d", &t);
    40     while (t--)
    41     {
    42         scanf ("%d%d%d%d%d%d%d", &n, &node[1].l, &node[1].r, &a, &b, &c, &d);
    43 
    44         for (int i=2; i<=n; ++i)
    45         {
    46             node[i].l = node[i-1].l * a + b;
    47             node[i].r = node[i-1].r * c + d;
    48         }
    49         for (int i=1; i<=n; i++)
    50         {
    51             if (node[i].l > node[i].r)    swap (node[i].l, node[i].r);
    52         }
    53 
    54         unsigned int mn_r = 4294967295UL, mx_l = 0;
    55         for (int i=1; i<=n; ++i)
    56         {
    57             if (mn_r > node[i].r)    mn_r = node[i].r;
    58             if (mx_l < node[i].l)    mx_l = node[i].l;
    59         }
    60 
    61         if (mn_r > mx_l)
    62         {
    63             puts ("NO");    continue;
    64         }
    65 
    66         bool flag = false;
    67         for (int i=1; i<=n; ++i)
    68         {
    69             if (mn_r < node[i].l && node[i].r < mx_l)
    70             {
    71                 flag = true;    puts ("YES");    break;
    72             }
    73         }
    74         if (!flag)    puts ("NO");
    75     }
    76 
    77     return 0;
    78 }
     1 /*
     2     贪心水题
     3 */
     4 #include <cstdio>
     5 #include <iostream>
     6 #include <algorithm>
     7 using namespace std;
     8 
     9 const int MAXN = 1e2 + 10;
    10 const int INF = 0x3f3f3f3f;
    11 struct Node
    12 {
    13     int l, r;
    14 }node[MAXN];
    15 
    16 bool cmp(Node x, Node y)
    17 {
    18     if (x.r == y.r)    return x.l < y.l;
    19 
    20     return x.r < y.r;
    21 }
    22 
    23 int main(void)        //HDOJ 2037 今年暑假不AC
    24 {
    25     //freopen ("HDOJ_2037.in", "r", stdin);
    26 
    27     int n;
    28     while (scanf ("%d", &n) == 1)
    29     {
    30         if (n == 0)    break;
    31 
    32         if (n == 1)
    33         {
    34             puts ("1");        continue;
    35         }
    36 
    37         for (int i=1; i<=n; ++i)
    38         {
    39             scanf ("%d%d", &node[i].l, &node[i].r);
    40             if (node[i].l > node[i].r)    swap (node[i].l, node[i].r);
    41         }
    42 
    43         sort (node+1, node+1+n, cmp);
    44 
    45         int cnt = 1;
    46         int tmp = node[1].r;
    47         for (int i=2; i<=n; ++i)
    48         {
    49             if (node[i].l >= tmp)
    50             {
    51                 tmp = node[i].r;    ++cnt;
    52             }
    53         }
    54 
    55         printf ("%d
    ", cnt);
    56     }
    57 
    58     return 0;
    59 }
    HDOJ 2037 今年暑假不AC
    编译人生,运行世界!
  • 相关阅读:
    iOS 调试心得
    一步一步带你安装史上最难安装的 vim 插件
    20 行代码极速为 App 加上聊天功能
    在通知栏上玩游戏,Steve iOS 游戏实现思路
    ThinkPHP 3.2.x 集成极光推送指北
    MkDocs 文档生成逻辑浅析
    极光推送的角标问题
    聊天界面-自适应文字
    Python3.7源码包编译安装
    Navicat远程连接MySQL数据库
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4473917.html
Copyright © 2020-2023  润新知