题解:P17135 [KOI 2026 #1] 剪刀石头布
__EternalLife__ · · 题解
超级无敌巨大水题。
考虑当前位置
容易想到,当位置为
然后在其中加入一个克制
所以,只要左边有一个
但是,如果左边是克制
综上,如果左边是克制
右边同理。暴力枚举判断是
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int maxn=2e5+10;
int preR[maxn],preS[maxn],preP[maxn];
int n;
string s;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>s; s=" "+s;
for(int i=1;i<=n;i++){
if(s[i]=='R') preR[i]=1;
else if(s[i]=='P') preP[i]=1;
else preS[i]=1;
}
for(int i=1;i<=n;i++) preS[i]+=preS[i-1],preR[i]+=preR[i-1],preP[i]+=preP[i-1];
for(int i=1;i<=n;i++){
if(s[i]=='R'){
if(i>1){
if(preP[i-1]+preR[i-1]==i-1&&preR[i-1]!=i-1){
cout<<'0'; continue;
}
}
if(i<n){
if(preP[n]-preP[i]+preR[n]-preR[i]==n-i&&preR[n]-preR[i]!=n-i){
cout<<'0'; continue;
}
}
cout<<'1';
}
else if(s[i]=='P'){
if(i>1){
if(preS[i-1]+preP[i-1]==i-1&&preP[i-1]!=i-1){
cout<<'0'; continue;
}
}
if(i<n){
if(preS[n]-preS[i]+preP[n]-preP[i]==n-i&&preP[n]-preP[i]!=n-i){
cout<<'0'; continue;
}
}
cout<<'1';
}
else{
if(i>1){
if(preR[i-1]+preS[i-1]==i-1&&preS[i-1]!=i-1){
cout<<'0'; continue;
}
}
if(i<n){
if(preR[n]-preR[i]+preS[n]-preS[i]==n-i&&preS[n]-preS[i]!=n-i){
cout<<'0'; continue;
}
}
cout<<'1';
}
}
return 0;
}
:::