Restricted RPS CodeForces - 1245B
https://vjudge.net/contest/356807#problem/H
题意
A和B进行剪刀石头布n次
A已知B出的类型顺序,同时规定A必须出三种类型的次数
A能赢n/2局则算A赢,并给出出拳序列
否则A输
思路
简单模拟
根据给定的B出拳序列构造A出拳序列
不够的就填充剩余的类型
代码
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<bitset> 6 #include<cassert> 7 #include<cctype> 8 #include<cmath> 9 #include<cstdlib> 10 #include<ctime> 11 #include<deque> 12 #include<iomanip> 13 #include<list> 14 #include<map> 15 #include<queue> 16 #include<set> 17 #include<stack> 18 #include<vector> 19 #include <vector> 20 #include <iterator> 21 #include <utility> 22 #include <sstream> 23 #include <limits> 24 #include <numeric> 25 #include <functional> 26 using namespace std; 27 #define gc getchar() 28 #define mem(a) memset(a,0,sizeof(a)) 29 //#define sort(a,n,int) sort(a,a+n,less<int>()) 30 31 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 32 33 typedef long long ll; 34 typedef unsigned long long ull; 35 typedef long double ld; 36 typedef pair<int,int> pii; 37 typedef char ch; 38 typedef double db; 39 40 const double PI=acos(-1.0); 41 const double eps=1e-6; 42 const ll mod=1e9+7; 43 const int inf=0x3f3f3f3f; 44 const int maxn=1e5+10; 45 const int maxm=100+10; 46 47 48 bool compare(int a, int b) 49 { 50 return a < b;//升序 51 } 52 53 54 char sequence_R[100] = {0}; 55 char sequence_G[100] = {0}; 56 int main(){ 57 int T; 58 int n = 0; 59 int s = 0 , r = 0 , p = 0; 60 int r1 = 0 , p1 = 0 , s1 = 0; 61 int sum = 0; 62 cin >> T; 63 while(T--) 64 { 65 for(int i = 0;i<n;i++) 66 { 67 sequence_R[i] = 0; 68 sequence_G[i] = 0; 69 } 70 n = 0; 71 s = 0; r = 0; p = 0; 72 r1 = 0 , p1 = 0 , s1 = 0; 73 sum = 0; 74 cin >> n; 75 cin >> r >> p >> s; 76 cin >> sequence_R; 77 for(int i = 0;i<n;i++) 78 { 79 if(sequence_R[i] == 'R') r1++; 80 if(sequence_R[i] == 'P') p1++; 81 if(sequence_R[i] == 'S') s1++; 82 } 83 sum += min(r1,p) + min(p1,s) + min(s1,r); 84 85 if(sum >= (n+1)/2) 86 { 87 cout << "YES" << endl; 88 for(int i = 0;i<n;i++) 89 { 90 if(sequence_R[i]=='R' && p > 0) 91 { 92 sequence_G[i]='P'; 93 p -= 1; 94 } 95 else if(sequence_R[i]=='P' && s > 0) 96 { 97 sequence_G[i]='S'; 98 s -= 1; 99 } 100 else if(sequence_R[i]=='S' && r > 0) 101 { 102 sequence_G[i]='R'; 103 r -= 1; 104 } 105 } 106 for(int i = 0;i<n;i++) 107 { 108 if(sequence_G[i]) 109 { 110 cout << sequence_G[i]; 111 } 112 else 113 { 114 if(r) 115 { 116 cout << 'R'; 117 r -= 1; 118 } 119 else if(p) 120 { 121 cout << 'P'; 122 p -= 1; 123 } 124 else if(s) 125 { 126 cout << 'S'; 127 s -= 1; 128 } 129 } 130 } 131 } 132 else 133 { 134 cout << "NO" << endl; 135 } 136 cout << endl; 137 } 138 return 0; 139 }