原题:传送门
题意:给你一个序列序列上每个元素的值代表比赛的难度,然后你从左到右可以选择参加或者不参加。然后你有一个智商值,在这个序列里如果当前比赛难度小于等于你的智商就无影响,否则智商值减1,如果智商变成了 0 就无法操作。
要你最大化参加比赛的次数,并构造方案。
思路:可以逆向思维,倒着考虑这个序列,那么问题就转化为开始的智商为0,如果比赛难度大于智商就可以选择+1通过这个比赛,智商最高就为q,那么根据思路模拟一遍代码就可以了。
AC代码:
#include <bits/stdc++.h>
void solve(){
int n,q;
std::cin>>n>>q;
std::vector<int>a(n),ans(n);
for(int i=0;i<n;i++) std::cin>>a[i];
int add = 0;
for(int i=n-1;i>=0;i--)
if(a[i]<=add) ans[i]=1;
else if(add<q) add++,ans[i]=1;
else ans[i]=0;
for(int i=0;i<n;i++) std::cout<<ans[i];
std::cout<<"\n";
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int T;
std::cin>>T;
while(T--){
solve();
}
return 0;
}