• codeforces 985B Switches and Lamps


    题意:

    有n个开关,m盏灯。

    一个开关可以控制多个灯,一旦一个灯开了之后,之后再对这个灯的操作就没用了。

    问是否存在一个开关,去掉了这个开关之后,按下其它开关之后所有的灯还是亮的。

    思路:

    首先统计每个灯被按了几次,然后枚举每个开关,把这个开关的贡献去掉,判断是否所有灯的次数大于等于1,然后再回复这个开关的贡献。

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 using namespace std;
     5 const int N = 2005;
     6 int vis[N];
     7 char s[N][N];
     8 int main()
     9 {
    10     int n,m;
    11     scanf("%d%d",&n,&m);
    12     for (int i = 0;i < n;i++)
    13     {
    14         scanf("%s",s[i]);
    15     }
    16     for (int i = 0;i < n;i++)
    17     {
    18         for (int j = 0;j < m;j++)
    19         {
    20             if (s[i][j] == '1') vis[j]++;
    21         }
    22     }
    23     bool f = 0;
    24     for (int i = 0;i < n;i++)
    25     {
    26         bool ff = 0;
    27         for (int j = 0;j < m;j++)
    28         {
    29             if (s[i][j] == '1') vis[j]--;
    30             if (vis[j] == 0) ff = 1;
    31         }
    32         if (!ff) f = 1;
    33         for (int j = 0;j < m;j++)
    34         {
    35             if (s[i][j] == '1') vis[j]++;
    36         }
    37     }
    38     if (f) puts("Yes");
    39     else puts("No");
    40     return 0;
    41 }
  • 相关阅读:
    算法提高 约数个数
    算法提高 第二大整数
    算法提高 逆序排列
    算法提高 c++_ch02_01
    算法提高 日期计算
    程序员教你设置密码
    fzu 2184 逆序数还原
    fzu 2146 Easy Game
    算法训练 区间k大数查询
    算法训练 最大最小公倍数
  • 原文地址:https://www.cnblogs.com/kickit/p/9070396.html
Copyright © 2020-2023  润新知