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 }

 

posted @ 2020-02-16 16:33  YukiRinLL  阅读(104)  评论(0编辑  收藏  举报