专栏文章
题解:P14120 [SCCPC 2021] Rock Paper Scissors
P14120题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mini3xnk
- 此快照首次捕获于
- 2025/12/02 02:47 3 个月前
- 此快照最后确认于
- 2025/12/02 02:47 3 个月前
题目思路
理论
(先手):目标是让总得分最小化,因此会在每轮选择剩余牌中,能使后续 最优应对得分最低的牌型。
(后手):在 出某张牌后,会从剩余牌中选择能使本轮得分最大化的牌型应对。
双方均知晓彼此初始的三种牌(石头 、布 、剪刀 )数量,且每轮出牌后双方的牌都会被移除,游戏共进行
规则
| 石头 (r) | 布 (p) | 剪刀 (s) | |
|---|---|---|---|
| 石头 (r) | 0 | -1 | 1 |
| 布 (p) | 1 | 0 | -1 |
| 剪刀 (s) | -1 | 1 | 0 |
思路
计算时先求每种正得分对抗的最大可能次数(取双方对应牌数最小值),累加得正分总和;再算负得分对抗(得 分的 种情况)的最小可能次数,累加得负分总和。总得分即正分与负分之和,此贪心策略契合双方最优目标,且能高效处理大数据。
题目代码
CPP#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int T;
cin>>T;
while(T--)
{
int br,bp,bs;
cin>>br>>bp>>bs;
int dr,dp,ds;
cin>>dr>>dp>>ds;
int a=min(br,dp);//Dp vs Br(得1分)
br-=a;
dp-=a;
int b=min(bp, ds);//Ds vs Bp (得1分)
bp-=b;ds-=b;
int c=min(bs,dr);//Dr vs Bs (得1分)
bs-=c;
dr-=c;
int sum=a+b+c;
int d=min(bp,dr)//Dr vs Bp (得-1分)
int e=min(bs,dp);//Dp vs Bs (得-1分)
int f=min(br,ds);//Ds vs Br (得-1分)
int sum1=-(d+e+f)
cout<<sum+sum1<<"\n";
}
return 0;
}
若有不足之处请多多指教,谢谢各位大佬!!
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...