Codeforces 570B Simple Game 概率求解,简单数学思维

题目描述了这么一个情景,给定一个范围 1~n ,两个人(简记为 a和b)各自随机选一个整数,然后再在1~n这个范围内随机找一个整数(1~n所有整数被选到的概率是相等的),这两个人谁选择的数更接近这个随机数谁就赢。

现在给出选数范围,给出其中一方(记做b)已经选好的数(记做m),问a应该选哪个数,才能使得a获胜的几率尽可能大?如果有不唯一的答案,就输出其最小值

画根数轴自己想象一下就明白了,如果b选好的数m更偏向1,那么a应该选m+1,如果更偏向n,a就应该选m-1,

然后就是有一个我觉得有问题的地方:当范围局限于1这一个数,然后b选的数也是1的时候,a是不可能赢得,因为这个时候a没得选只能也选1,然而题目中有约定,如果两人选的数字同随机数的距离相等,则判定b赢,也就是说这个情况下a必输

比赛时第一次提交代码的时候觉得这个地方是有争议不会出数据,结果,呵呵了,交上去先过了pretest,然后就被hack了,这场比赛有好多人凭借hack这个题就加了上千分。。这特么冤死啊。。

可以解释:题目只是让你输出成功概率“最大”的点,最大也可以是0啊,不输出才叫有问题。

莫想当然

By skyword, contest: Codeforces Round #316 (Div. 2), problem: (B) Simple Game, Accepted, #
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#define file
#define maxn 100010
using namespace std;
int m,n;
int main()
{
    scanf("%d%d",&n,&m);
    int t=m-1;
    int p=m+1;
    if(m==1&&n==1)
    {
        printf("1\n");
    }
    else
    {
        if(m>(n/2))
        {
            printf("%d\n",t);
        }
        else
        {
            printf("%d\n",p);
        }
    }
}

同场比赛还有个A题,是个简单模拟,略考验代码水平。。很简单,就不写题解了

rating终于涨了一点,还算有点自信

加油吧。。

你可能感兴趣的:(简单数学)