还不能返校怎么办啊?毛子取消比赛了怎么办啊?省赛打不过怎么办啊?毕业怎么办啊?工作怎么办啊?完蛋了啊!

20/3/26


C. Timofey and remoduling - 2500

题意 在模 \(m\) 意义下,给 \(n\) 个数字,能否 shuffle 出等差数列。

复盘 第一想法是好难不会,然后随手抓两个数字作差一下,发现一定是 \(kd\) 形式的,其中 \(-(n-1)\leq k\leq n-1\),枚举 \(k\) 可求出 \(d\),然后 check \(d\) 是否合法,怎么 check 呢?先根据元素和等于等差数列之和来算首项 \(x\),然后依次判断 \(x,x+d,x+2d...\) 是否存在。然后TLE on 57,然后企图通过随机扰动解决问题,施展了半天,倒在了第59个点上,遂黔驴技穷。Bad Ending,每次施展随机化都是 Bad Ending 啊,马季恨。

题解

  • 求出 \(d\) 就稳了。
  • 先不考虑模域什么的啊。观察等差数列 \(a_1,a_2,...,a_n\) 发现差为 \(kd\) 的有序对个数恰为 \(n-k\) 个,那随手选两个元素作差一下,其结果 \(x\) 一定是 \(kd\) 的形式,统计一下几个有序对差为 \(kd\) 就能确定 \(d\) 了。
  • 考虑模域呢,\(i\)\(i+d\) 连边会成一个环,脑补一下长度为 \(n\) 的子串。
  • 发现 \(m\geq2n\) 以上性质成立!
  • \(m<2n\) 考虑 \(a[]\) 的补集可归结到上种 case,可求 \(d\)
  • 很有趣的 Big-Small 战法。

coding time 22(-6)。WA题小能手,能WA的地方都WA了一WA

20/3/27


猜你喜欢

转载自www.cnblogs.com/FST-stay-night/p/12571910.html
今日推荐