您的位置:首页 > 其它

HDU_2013 ACM-ICPC南京赛区全国邀请赛——题目重现

2014-04-29 16:46 465 查看
南京赛区题目重现

      1001.令Ex表示从开始掷骰子到结束得到的期望值,假设涂色的筛子是1,2,3...m,那么   有 Ex = 1/n*(a[1]+Ex) + 1/n*(a[2] + Ex) +...1/n*(a[m]+Ex) + 1/n*a[m+1]+...1/n*a

      化简得 Ex = sum{a[i]}/(n-m);

P.s. n==m的时候未必就是inf,比如,sum{a[i]} == 0...

      1003.求 a+...+b的过程中有几次二进制进位。把区间[a,b]中每个数写成二进制形式,然后末尾对齐来个 b-a+1个数的二进制加法模拟即可。当然不是暴力。对于二进制的第i位,先算出[a,b]内有多少个数的二进制形式在该位是 1。这一问题满足区间减法,所以求出[0,a-1]和[0,b]内的个数做差即可。

      1011.鲁莽了,之前的想法没太透彻就敲了,导致这题当时没A掉。结果比想象的简单。考虑 x[i] 和 x[j].他们能构成绝对威胁当且仅当 :存在非负整数  ki,kj 

      st:  id == ki*x[i] + r[i] == kj*x[j] + r[j] {  y[i] <= r[i] <= z[i],  y[j] <= r[j] <= z[j] }

      即   ki*x[i] - kj*x[j] = p; {  y[j] - z[i] <=  p  ==  r[j] - r[i] <= z[j] - y[i] }  (1)

     这个方程有解当且仅当gcd(x[i],x[j])能整除p,所以在 p的范围内一定要存在gcd(x[i],x[j] 的倍数。

     此外还要保证 ki, kj 的非负性。万一 ki , kj 都是 负的但是 p 是正的,那也是不行的。

     用欧几里得算法可以求出 X, Y  st:X * x[i] + Y * x[j]  = gcd( x[i], x[j] );  (2)

因为 gcd( x[i], x[j] ) 能整除 p ,这样就能由 (2) 构造出 (1)从而判断 ki,kj的正负了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm
相关文章推荐