概述
题目描述了这么一个情景,给定一个范围 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<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<cstring>
#include<vector>
#include<string>
#include<cmath>
#include<stack>
//#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("1n");
}
else
{
if(m>(n/2))
{
printf("%dn",t);
}
else
{
printf("%dn",p);
}
}
}
同场比赛还有个A题,是个简单模拟,略考验代码水平。。很简单,就不写题解了
rating终于涨了一点,还算有点自信
加油吧。。
最后
以上就是称心曲奇为你收集整理的Codeforces 570B Simple Game 概率求解,简单数学思维的全部内容,希望文章能够帮你解决Codeforces 570B Simple Game 概率求解,简单数学思维所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复