专栏文章
题解:P14173 【MX-X23-T3】猜拳游戏
P14173题解参与者 11已保存评论 11
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @minoegbf
- 此快照首次捕获于
- 2025/12/02 05:43 3 个月前
- 此快照最后确认于
- 2025/12/02 05:43 3 个月前
说句闲话
若 Alice 和 Bob 一秒进行一次石头剪刀布,那么他们将会交战约 个世纪。
小 R 最多要请的奶茶杯数为 。假设一杯奶茶 元,则小 R 要花掉 万元。
假设一杯奶茶 ,则 Alice 和 Bob 一共要喝 的奶茶。
解题思路
设 。若 ,则 与 一定是会进行交战的。
证明过程
必要性证明
假设存在局数 使得 与 交战,即 和 。由定义:
- 对于某个整数 。
- 代入第二式:,即 。
该线性同余方程有解当且仅当 。令 ,则 ,即 。必要性得证。
充分性证明
假设 ,即 。令 ,,其中 。由 ,可设 对于某个整数 。
考虑方程 ,即 。两边除以 (因 ):
由于 ,该方程有解 。令 ,则:
- (由 ),
- (因 )。
故 与 在局 中相遇。充分性得证。
所以,我们对 和 的值对 和 进行分组。
由于一个组内的 和 都要两两进行交战,所以设这个组内的 构成的集合为 ,这个组内的 构成的集合为 ,我们要使 。
所以,对于每个组,我们需要进行最少次数的替换,使得出招满足上述条件。设 为当前组内 中
R 出现的次数, 为 P 出现的次数, 为 S 出现的次数, 为当前组内 中 R 出现的次数, 为 P 出现的次数, 为 S 出现的次数,则替换的最少次数为:其中, 指的是将 中的
P 和 S 都替换成 R,把 中的 R 替换成其它的字母所花的代价。其它式子同理。Code
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int gg(char c)
{
if(c=='R')return 1;
if(c=='P')return 2;
if(c=='S')return 3;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m,s=0;
string a,b;
cin>>n>>m>>a>>b;
int g=__gcd(n,m);
for(int i=1;i<=g;i++)
{
int x[5]={},y[5]={};
for(int j=i-1;j<n;j+=g)x[gg(a[j])]++;
for(int j=i-1;j<m;j+=g)y[gg(b[j])]++;
s+=min({x[1]+y[2]+y[3],
y[1]+x[2]+x[3],
x[2]+y[1]+y[3],
y[2]+x[1]+x[3],
x[3]+y[1]+y[2],
y[3]+x[1]+x[2]});
}
cout<<s;
return 0;
}
AI 使用说明
本文使用 DeepSeek 进行了证明。因为本人太菜了,不会证。
相关推荐
评论
共 11 条评论,欢迎与作者交流。
正在加载评论...