C. Customer Service

题目链接👈

题目描述🥰

题目思路😀

这个题目我们可以反过来思考问题。

因为ai>=1所以

  • 在最后时候,队伍数为0的队伍肯定是最后清空的,所以队伍数为多少都可以。
  • 而队伍数为1的肯定是倒数第二个清空的,而且最后来了一个人的。
  • 而队伍人数为2的也肯定是倒数第三个清空的,而且最后两次都是刚好只来了一个人的

所以我们可以发现一个规律,我们只需要计算每一个队伍的后缀的连续1的个数即可。

先处理出所有队列的增加序列的最后连续为 1 的个数,将它从小到大排序,依次看是否存在对应数量的连续 1 的个数。若不存在就可以直接输出答案

AC代码🧠

void solve()
{
	int n;cin>>n;
	vector<int>a(n+1);
	for(int i=1;i<=n;i++)
	{
		int cnt=0;
		bool flag=false;
	 for(int j=1;j<=n;j++)
	 {
	     int x;
	     cin>>x;
	     if(x==1)
	     {
	     	cnt++;
	     }else{
	     	cnt=0;
	     }	
	 }
	 // cout<<cnt<<endl;
	 a[i]=cnt;
	}
	int ans=0;
    sort(a.begin()+1,a.begin()+n+1);
    for(int i=1;i<=n;i++)
    {
    	if(a[i]>=ans){
    		ans++;
    	}
    }
    cout<<min(ans,n)<<endl;
}

 

 posted on 2025-04-21 11:22  熙玺  阅读(13)  评论(0)    收藏  举报

Shu-How Zの小窝

Loading...