我是靠谱客的博主 称心曲奇,这篇文章主要介绍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啊,不输出才叫有问题。

莫想当然

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部