题解:P14173 【MX-X23-T3】猜拳游戏
:::info[说句闲话]
若 Alice 和 Bob 一秒进行一次石头剪刀布,那么他们将会交战约
小 R 最多要请的奶茶杯数为
假设一杯奶茶
解题思路
设
:::info[证明过程]
必要性证明
假设存在局数
-
- 代入第二式:
i + n t \equiv j \pmod{m} ,即n t \equiv j - i \pmod{m} 。
该线性同余方程有解当且仅当
充分性证明
假设
考虑方程
由于
故
所以,我们对
由于一个组内的
所以,对于每个组,我们需要进行最少次数的替换,使得出招满足上述条件。设 R 出现的次数,P 出现的次数,S 出现的次数,R 出现的次数,P 出现的次数,S 出现的次数,则替换的最少次数为:
其中,P 和 S 都替换成 R,把 R 替换成其它的字母所花的代价。其它式子同理。
Code
#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;
}
:::info[AI 使用说明]
本文使用 DeepSeek 进行了证明。因为本人太菜了,不会证。
:::