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
浙公网安备 33010602011771号