codeforces 985B Switches and Lamps

时间:2024-01-16 14:01:15

题意:

有n个开关,m盏灯。

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

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

思路:

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

代码:

 #include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = ;
int vis[N];
char s[N][N];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for (int i = ;i < n;i++)
{
scanf("%s",s[i]);
}
for (int i = ;i < n;i++)
{
for (int j = ;j < m;j++)
{
if (s[i][j] == '') vis[j]++;
}
}
bool f = ;
for (int i = ;i < n;i++)
{
bool ff = ;
for (int j = ;j < m;j++)
{
if (s[i][j] == '') vis[j]--;
if (vis[j] == ) ff = ;
}
if (!ff) f = ;
for (int j = ;j < m;j++)
{
if (s[i][j] == '') vis[j]++;
}
}
if (f) puts("Yes");
else puts("No");
return ;
}