Week14 作业 A - Q老师与石头剪刀布 CodeForces - 1245B
题目描述:
每一个大人曾经都是一个小孩,Q老师 也一样。
为了回忆童年,Q老师 和 Monika 玩起了石头剪刀布的游戏,游戏一共 n 轮。无所不知的 Q老师 知道每一轮 Monika 的出招,然而作为限制, Q老师 在这 n 轮游戏中必须恰好出 a 次石头,b 次布和 c 次剪刀。
如果 Q老师 赢了 Monika n/2(上取整) 次,那么 Q老师就赢得了这场游戏,否则 Q老师 就输啦!
Q老师非常想赢,他想知道能否可以赢得这场游戏,如果可以的话,Q老师希望你能告诉他一种可以赢的出招顺序,任意一种都可以。
总结:
这题其实没有什么注意的点,但是有一个关于C++语言的问题,看下方图片

代码:
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int cntM[258];
int N,A,B,C;
string M;
int realA,realB,realC;
void print()
{
cout<<"YES"<<endl;
string s(N,0);
A-=realA,B-=realB,C-=realC;
//Ìî³ä
for(int i=0;i<N;i++)
{
if( M[i]=='S' && realA>0 ) s[i]='R',--realA;
else if( M[i]=='R' && realB>0 ) s[i]='P',--realB;
else if( M[i]=='P' && realC>0 ) s[i]='S',--realC;
}
//Ìî³äÍêÓ®µÄ£¬Ê£ÏµÄËæ±ãÌî³ä
for(int i=0;i<N;i++)
{
if(s[i]==0)
{
if(A>0) s[i]='R',--A;
else if(B>0) s[i]='P',--B;
else if(C>0) s[i]='S',--C;
}
}
cout<<s<<endl;
}
int main()
{
int T;
cin>>T;
while(T--)
{
memset(cntM,0,sizeof(cntM));
cin>>N>>A>>B>>C>>M;
for(auto x:M)
cntM[x]++;
realA=min(A,cntM['S']),
realB=min(B,cntM['R']),
realC=min(C,cntM['P']);
int Limit=(int)ceil((double)N/2.0);
int Now=realA+realB+realC;
if(Now<Limit) cout<<"NO"<<endl;
else print();
}
return 0;
}

浙公网安备 33010602011771号