CF1774C题解
假设最后一场的环境为 ,即温度大的人赢,那么温度为 的人即使活到了最后一场也必输。
同理,如果最后 场的环境都为 ,那么有 个人一定没机会赢,另外的 名选手都有机会赢,因为只有温度大于等于 的人才可能连续战胜温度为 的人活到最后。
那么如何保证 名选手都有机会活到最后 场呢?假设要使选手 活到最后 场,只需要先让剩下的在 中的选手互相对战,由于第 场环境一定为 ,那么让剩下的另一名选手 和 中的选手打,被淘汰,那么 就活到了最后 场。
反之如果最后 场的环境都为 也同样可以证明有机会赢的人数为 。
AC Code:
#include<bits/stdc++.h>
using namespace std;
int t,n;
string s;
int main(){
cin>>t;
while(t--){
cin>>n>>s;
cout<<1<<' ';
for(int i=1,k=1;i<s.size();i++){//k表示最长相同后缀的长度
if(s[i]==s[i-1]){
k++;
}
else{
k=1;
}
cout<<i+2-k<<' ';//第1~i+2名选手参赛
}
cout<<endl;
}
return 0;
}
本人(KK_SpongeBob)蒟蒻,写不出好文章,但转载请注明原文链接:https://www.cnblogs.com/OIer-QAQ/p/18575284

浙公网安备 33010602011771号