从第一场降智的比赛到最后一场比赛全部参与,这种策略一定是最优的。(证明)
假设全部参与,智商为负数,那么就不能全部参与,即至少有一场没有参与,恰好使得剩余场次参与之后智商为零,此时最优,而智商初始值最小为1,那么必然有降智的场次,假设第一场降智的场次为x,那么“x到n全部参与,1到x - 1能参与的就参与”一定是一种最优解。
在不能全部参与的情况下,“x到n全部参与,1到x - 1能参与的就参与”这种策略一定会使得最后的智商为零,从而达到最优。二分找出x这个位置,即可得到答案。
int n, q;
int a[N];
bool check(int x)
{
int cur = q;
for(int i = x; i <= n; i ++ ) if(a[i] > cur) cur --;
return cur >= 0;
}
void solve()
{
cin >> n >> q;
for(int i = 1; i <= n; i ++ ) cin >> a[i];
int l = 1, r = n;
while(l < r)
{
int mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
}
for(int i = 1; i < l; i ++ )
{
if(a[i] <= q) cout << 1;
else cout << 0;
}
for(int i = l; i <= n; i ++ ) cout << 1;
cout << "\n";
return;
}