2023年中国大学生程序设计竞赛女生专场题解, K. RSP
Dashboard - 2023年中国大学生程序设计竞赛女生专场 - Codeforces
K. RSP
time limit per test1 second
memory limit per test512 megabytes
input standard input
output standard output
小 A 和小 B 在玩一种叫做石头剪刀布的游戏。
这个游戏的规则很复杂,每一轮游戏小 A 和小 B 都同时在石头、剪刀、布三种里面选择一种,然后石头可以打败剪刀,剪刀可以打败布,布可以打败石头,相同则为平局。
他们玩了一会儿之后就发现只有三种选择太无聊了,于是将游戏拓展成了每次从 n 种里选一个,类似的第 1 种可以打败第 2 种,... 第 n - 1 种可以打败第 n 种,第 n 种可以打败第 1 种,没有胜负关系的均为平局。
因为这个游戏运气成分太强,他们认为只靠一轮定胜负太不公平,于是约定每局游戏玩 m 轮,获胜次数多的获胜。
同时为了游戏更加有策略性,他们约定不能连续出相同的。
假设他们都是绝顶聪明的(会做出净胜期望尽可能大的选择),请你算一算这个游戏的获胜概率。
Input
输入的第一行包含两个整数 n , m (3 ≤ n ≤ 109, 1 ≤ m ≤ 109),表示每次可以选择的数量和一局游戏的轮数。
Output
输出一行 p "/"(不包含")q,表示有
的概率获胜,并且为最简分数(p, q 的最大公约数为 1)。
Examples
input
Copy
3 3
output
Copy
1/3
input
Copy
4 1
output
Copy
1/4
解析:
关键:同时为了游戏更加有策略性,他们约定不能连续出相同的。
第一句游戏一定是靠运气定输赢的,数和赢的概率都是1/n
之后应为双方都决顶聪明,他们约定不能连续出相同的,所以他们可以选择上一局被对方克制的那个数,因为对方不可能再选能克制这个数得数了,因为上一把已经选过了。
所以答案就是第一局赢得概率:1/n
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
using namespace std;
int n, m;
int main() {
cin >> n >> m;
cout << 1 << "/" << n << endl;
return 0;
}