• Restricted RPS CodeForces


    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 }

    作者:YukiRinLL

    出处:YukiRinLL的博客--https://www.cnblogs.com/SutsuharaYuki/

    您的支持是对博主最大的鼓励,感谢您的认真阅读。

    本文版权归作者所有,欢迎转载,但请保留该声明。

  • 相关阅读:
    手写PE文件(不借助编译器,用十六进制数进行编写)
    浅谈代码段加密原理(防止静态分析)
    PE文件动态加载执行过程
    静态数据连接库(.lib)和动态连接库(.dll)
    关于普通断点/内存断点/硬件断点
    x64dbg零基础使用教程
    HOOK相关原理与例子
    socket,实现服务器和客户端对话
    解析PE文件
    python正则表达式---基于re模块
  • 原文地址:https://www.cnblogs.com/SutsuharaYuki/p/12317341.html
Copyright © 2020-2023  润新知