AtCoder Regular Contest 064

C - Boxes and Candies

Score : 300 300 300 points 贪心

每次比较相邻两个,贪心的给最后一个加即可。

代码

D - An Ordinary Game

Score : 500 500 500 points 博弈 + 结论

太蠢了,没看出来。

先说结论:

  1. s s s的长度是奇数时,如果第一个和最后一个字母相同,那么先手必败,否则先手必胜。
  2. s s s的长度是偶数,如果第一个和最后一个字母相同,那么先手必胜,否则先手必败。

下面解释一下

由于两头的字母不能动,并且我们最终状态一定是 a b a b abab abab,或者 a b a aba aba这两种类型,不难发现这两个状态是必败态,考虑必胜到必败状态的转换,再考虑上奇偶性,就得出如上结论了。

代码

E - Cosmic Rays

Score : 600 600 600 points 最短路

很基础的一个建图题了,不多说。

代码

F - Rotated Palindromes

Score : 1000 1000 1000 points d p dp dp + 回文

题意:求长度为 n n n并且 a a a种的数在 [ 1 , k ] [1,k] [1,k]内,并且 a a a是一个回文的数的个数。

1 ≤ n , k ≤ 1 e 9 1\le n,k\le 1e9 1n,k1e9

首先不难得出一共可以产生 m ( n + 1 ) / 2 m^{(n+1)/2} m(n+1)/2种回文串,将他们循环左移 n n n次后产生多个字符串,不难发现有很多重复的,下面考虑去重。

考虑会产生重复的原因,可以发现跟循环节有关系。比如 a b b a a b b a abbaabba abbaabba,他循环右移到 b a a b b a a b baabbaab baabbaab就重复了,这个时候就应该停止,为什么呢?因为 a b b a abba abba是他的最小循环节,回文串的最小循环节一定也是回文串,分以下两种情况:

  • 当最小循环节的长度是偶数时,他的贡献就是 ∣ s ∣ 2 \frac{|s|}{2} 2s
  • 当最小循环节长度为奇数时,他的贡献就是 ∣ s ∣ |s| s

所以我们可以枚举 n n n的约数,也就是最小循环节的长度,设 d p [ i ] dp[i] dp[i]代表循环节长度是 i i i的时候的有多少串,当然需要去掉有更小循环节的情况,让后根据奇偶乘上 i i i或者 i / 2 i/2 i/2即可,复杂度大约是 n + d 2 l o g n \sqrt n+d^2logn n +d2logn

代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值