题解:CF2042C Competitive Fishing
Hide_In_The_Shadow · · 题解
智慧+注意力题。
将
场上被卡成伞兵了。其实只需要注意到当前点前划分与否对后续序列造成的影响是固定的,问题就迎刃而解了。
我们记
然后,我们可以对除了
时间复杂度
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int t,n,k,sum[N];
char s[N];
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>t;
while(t--){
cin>>n>>k>>s;
for(int i=n;i>=1;--i){
sum[i]=sum[i+1]+(s[i-1]-'0'?1:-1);
}
sort(sum+2,sum+n+1);
int ans=0,now=0;
for(int i=n;i>=2;--i){
if(sum[i]<=0)break;
now+=sum[i];
ans++;
if(now>=k)break;
}
if(now>=k)cout<<ans+1<<'\n';
else cout<<"-1\n";
for(int i=1;i<=n;++i)sum[i]=0;
}
return 0;
}