Codeforces Round #421 (Div. 2) 820

12 篇文章 0 订阅

比赛网址:http://codeforces.com/contest/820
补一补题解:
题意:
A:Mister B and Book Reading
B:Mister B and Angle in Polygon
题意为给定正n边形及角α,在多边形中任选3点,使构成的角最接近α。
C: Mister B and Boring Game
类似博弈题,题意大致为一开始给定长度为a的字符串s,abc……然后玩家先手,每次要往字符串末尾添加一个长度为b的字符串,组成随意。然后电脑会接着添加一个长度为a的字符串s2,且s2每个字符不出现在s长度为a的后缀里,且s2字典序要最小,问第l个字符到第r个字符最少有多少个不同字符。
D:Mister B and PR Shifts
题意是给定一个乱序的排列p,定义排列权值为 n1abs(p[i]i) 排列p可以循环右移,问最小权值及右移位数。
E:Mister B and Beacons on Field
在平面直角坐标系中有两个点A(0,n),B(m,0),给定s,点B沿着x轴运动到原点,点A再沿着y轴运动到原点,问在运动过程中,有多少时间点满足对于A,B存在C(x0,y0)使得 SABC=s .(上述点均为整点)

———————————————–分割线———————————————
A:模拟(窝居然wa2发捂脸)
B:
一开始没注意正N边形的条件……由于正多n边形n点共圆,从一点与不相邻的点引出n-3条线形成的夹角相等,为180/n,注意特判一下即可……
C:
(出题人由于标程被叉导致比赛unrated,貌似还没出正解……)我觉得大致是分类讨论,只不过情况贼多,赛时最后30s才瞎码完,wa……后来发现出题人貌似都放弃了这道题,于是只是水过数据就不想再讨论了。写写画画,a >=b 时,a+b为一个周期;a < <script type="math/tex" id="MathJax-Element-259"><</script>b,2*(a+b)为一个周期。r-l大于一个周期时很简单,然而接下来只能呵呵……
D:
设一开始有L个数在目标位置p[i]左边(及 i<=p[i], ),R个数在目标位置右边,再用cnt[i]记录在目标位置左边i位的数个数。循环右移i位时,L+=cnt[i-1],R-=cnt[i-1],有最后一个到了第一个,L++,R- -。
且要对最后一个数特判,so权值变化为-L+R+(n+1-p[n-i+1])+(p[n-i+1]-1)。
E:
首先对于第二阶段,求出 2s[1,n] 中有多少约数即可。

对于第二阶段,设B点运动到(k,0),且C(x,y),在AB上方,则
nx+kykn2=2s
nx+ky=2s+kn ,
方程有整数解充分必要条件是 gcd(k,n)|2s+kn,gcd(k,n)|2s .
设n分解质因数为 p1n1p2n2plnl
s为 p1s1p2s2plsl ,
又gcd(n,k)|2s,所以有min(ni,ki)<=si.
即对于ni>si,ki<=si;对于ni<=si,ki任意取.
BUT直接枚举有可能会有全是ni<=si的情况,即相当于直接枚举1~m。显然会超时~~~
考虑问题反面,即对于ni>si,使得ki>si即可。
设这些p为 p1pk 。且 aj=psi+1j ,则问题转化为求1~m中有多少个 aj 的倍数。

THEN利用类似容斥原理的思想,枚举每个pi取或不取,转化为二进制即0~ 2k1 ,对于某个状态的答案,若该状态有奇数个1,从答案减掉,偶数个1则加到答案。

代码:
A~E
http://paste.ubuntu.com/24976841/
http://paste.ubuntu.com/24976842/
http://paste.ubuntu.com/24976843/
http://paste.ubuntu.com/24976844/
http://paste.ubuntu.com/24976845/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值