因为可能跨天,就直接再复制一天的工作时间放在一天后就可以,贪心找最长连续段
或者再从头循环也不是不可以
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
int t;
const int maxn=2e5+10;
char c[maxn*2];//因为两天 所以长度*2
int main(){
cin>>t;
while(t--){
int ans=0;
cin>>n;int tot=0;
for(int i=1;i<=n;++i)
cin>>c[i],c[i+n]=c[i];//第二天时间相同
for(int i=1;i<=n*2;++i){
if(c[i]=='0') tot=0;
else ++tot;
ans=max(tot,ans);
}cout<<ans<<endl;
}return 0;
}
非延长数组做法
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
int t;
const int maxn=2e5+10;
char c[maxn];
int main(){
cin>>t;
while(t--){
int ans=0;
cin>>n;int tot=0;
for(int i=0;i<n;++i)
cin>>c[i];
for(int i=0;i<n*2;++i){
if(c[i%n]=='0') tot=0;
else ++tot;
ans=max(tot,ans);
}cout<<ans<<endl;
}
return 0;
}