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 }

 

posted @ 2018-05-22 09:18  qrfkickit  阅读(344)  评论(0编辑  收藏  举报