链接:https://ac.nowcoder.com/acm/contest/4138/H
来源:牛客网

时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
有 {1}1 到 {n}n 这些数字各一个。你用这些数字进行若干轮游戏。
对于每一轮,如果剩下的数字个数超过 {1}1 个,那么就等概率随机选择两个剩下的数字删去。如果这两个数字互质,得一分。
重复以上操作直到没数字可以删除为止。请问最后期望得多少分?
输入描述:
一行一个整数 {n}n (1 \leq n \leq 50001≤n≤5000)。
输出描述:
输出一个最简约数 \frac{a}{b}
b
a

表示答案。
示例1
输入
复制
2
输出
复制
1/1
示例2
输入
复制
4
输出
复制
5/3

题意很关键:第一天的时候a1,a2就可以各自加1了,然后第一天就是a1+1,a2+1;
接下来就是一样的步骤,不断更新a1,a2的值;。

注释的代码就是刚开始理解错了 想麻烦了

AC代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
int x,y;
int minn;
void get_ans(int v1,int v2,int a,int b,int ans)
{
    //cout <<v1<<" "<<v2<<" "<<a<<" "<<b<<" "<<ans<<endl;
//  if(ans>=minn) return ;
//  if(v1>=x&&v2<y) return ;
//  if(v1<x&&v2>=y) return ;
    if(v1>=x&&v2>=y)
    {
        minn=min(minn,ans);
        return ;
    }
    a++,b++;
    get_ans(v1+a,v2+b,a,b,ans+1);
    return;
}
int main()
{
    int a,b;
    cin >>a>>b;
    int n;
    cin >>n;
    minn=99999999;
    while(n--)
    {
        cin >>x>>y;
        get_ans(0,0,a,b,0);
    }
    cout <<minn<<endl;
}