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; }