zoukankan      html  css  js  c++  java
  • codeforces 515B. Drazil and His Happy Friends 解题报告

    题目链接:http://codeforces.com/problemset/problem/515/B

    题目意思:有 n 个 boy 和 m 个 girl,有 b 个 boy 和 g 个 girl (通过给出数组下标)是 happy的,规定每轮 dinner 中,派出编号为 i mod n 个男 和 i mod m 个女去。只要他们其中一个为 happy 时,另一个也会变得 happy,问最终所有男女是否都变得 happy。

      一步一步模拟就可以了。这个问题有一个难点,就是究竟要进行多少次才能判断有些男女无论如何都不会happy的。由于数据量不大,只有100。最坏的情况就是每一个男女都有机会组合,所以 100 * 100 次来控制次数就可以了。每次配完对都检查下是否每个男女都已经为 happy,以便尽早结束循环,不要再进行无谓的组合。

      开 virtual 做的,发现,为什么B比C更加少人做出来。。。(C是完全木有思路 - -)

      

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int maxn = 100 + 5;
     8 int boy[maxn], girl[maxn];
     9 int n, m;
    10 
    11 int main()
    12 {
    13     #ifndef ONLINE_JUDGE
    14         freopen("in.txt", "r", stdin);
    15     #endif // ONLINE_JUDGE
    16 
    17     int b, g;
    18     while (scanf("%d%d", &n, &m) != EOF) {
    19         memset(boy, 0, sizeof(boy));
    20         memset(girl, 0, sizeof(girl));
    21 
    22         int in;
    23         scanf("%d", &b);
    24         for (int i = 0; i < b; i++) {
    25             scanf("%d", &in);
    26             boy[in] = 1;
    27         }
    28         scanf("%d", &g);
    29         for (int i = 0; i < g; i++) {
    30             scanf("%d", &in);
    31             girl[in] = 1;
    32         }
    33         bool flag;
    34         int stb = 0, stg = 0;
    35         int cnt = maxn*maxn;
    36         while (cnt) {
    37             flag = true;
    38             stb %= n;
    39             stg %= m;
    40             if (boy[stb] || girl[stg]) {   // 其中一个是happy的
    41                 boy[stb] = 1;
    42                 girl[stg] = 1;
    43             }
    44             // 检查男女两边是否都已经happy
    45             for (int i = 0; i < n; i++) {
    46                 if (!boy[i]) {
    47                     flag = false;
    48                     break;
    49                 }
    50             }
    51             for (int i = 0; i < m; i++) {
    52                 if (!girl[i]) {
    53                     flag = false;
    54                     break;
    55                 }
    56             }
    57             if (flag)
    58                 break;
    59             stb++;
    60             stg++;
    61             cnt--;
    62         }
    63         printf("%s
    ", flag ? "Yes" : "No");
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    ASP.Net Core "The type initializer for 'Gdip' threw an exception"
    ERROR 1698 (28000): Access denied for user 'root'@'localhost'
    彻底卸载Xubuntu Kubuntu
    Ubuntu MariaDB PhpMyAdmin
    VMware虚拟机复制后Linux无法上网
    Visual Studio 项目依赖
    Windows 10 关闭Hyper-V
    一个用python写的比特币均线指标
    关于PHP连接上MySQL但不能插入数据
    【原创】关于pyinstaller打包的程序执行出错问题,pyinstaller3.5只支持matplotlib3.0.2已经解决
  • 原文地址:https://www.cnblogs.com/windysai/p/4295735.html
Copyright © 2011-2022 走看看