题目
思路
灯每 t 秒变一次,那么周期为 2*t,t<=5,那么
周期为 2,4,6,8,10,最小公倍数为 120,最晚从
5 开始,所以枚举 125 次便枚举出了所有的状态。
然后开一个数组表示时间,依次枚举每一个灯,在1-125s间的每一秒是亮着的还是不亮的
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
struct light{
int a;
int b;
}l[150];
int open[255]={0};
int main()
{
int n;
cin>>n;
string s;
cin>>s;
int i, j;
for(i = 1; i <= n; i++)
cin>>l[i].a>>l[i].b;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= 125; j++)
{
open[j] += s[i-1] - '0';
if(j >= l[i].b){
if((j-l[i].b)%l[i].a == 0)
{
s[i-1] = (s[i-1] == '1')?'0':'1';//切换状态
}
}
}
}
int mmax = -inf;
for (i = 1; i <= 125; i++)
mmax = max(open[i],mmax);
cout<<mmax<<endl;
return 0;
}