3810. 最长连续休息时间 题型:思维

75 阅读1分钟

3810. 最长连续休息时间 - AcWing题库

样例解析

刚开始没有看懂第一个样例: image.png 其实是这样的,题目说了连续休息时间可能跨天,因此我们这里可以出现首尾相连的情况,也就是一个环。

思路:模拟

连续休息时间可能跨天,所以我们需要把原数组复制一下,构造一个环,然后此时问题就变为求一个环内最长的连续1的个数。

#include<bits/stdc++.h>
using namespace std;
int t,n;
int ans,cnt;


void sovel()
{
    
    ans=0,cnt=0;
    
     cin>>n;vector<int>a(2*n);
    
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        a[i+n]=a[i];
    }
    
    for(int i=0;i<2*n;i++)
    {
        if(a[i]==0)
        {
            ans=max(ans,cnt);  //维护最大的区间的1的个数
            cnt=0;  //清空,不影响下一个区间的计数
        }
        else
        {
            cnt++;
        }
    }
    
    cout<<ans<<endl;
}
int main()
{
    
    cin>>t;
    while(t--)
    sovel();
   
    return 0;
}