A*G#C001

AGC001


A BBQ Easy

贪心。

https://agc001.contest.atcoder.jp/submissions/7856034

B Mysterious Light

很nb这个题

不好做,设(f(a,b))表示边长为(a,b),一个角为(60)度的平行四边形从(120)度的角平分线处出发能走的路程,转移是一个递归,复杂度证明类似(gcd)

https://agc001.contest.atcoder.jp/submissions/7856746

C Shorten Diameter

每条边新建一个虚点,从每个点(虚实兜星)出发搜不超过(D)层(枚举直径中点),能保证真正的直径不超过(D),最大的大小即是答案。

https://agc001.contest.atcoder.jp/submissions/7864577

D Arrays and Palindrome

翻题解(sqrt{})

先说结论,如果(a)中奇数不超过(2)个,就把它们安排到序列两端,然后输出(a_1-1,a_2,a_3,ldots,a_{n-1},a_n+1)。(此时只有(a_1)(a_n)可能是奇数)

可行性画一画就知道了,至于为什么只有这个对,考虑连的边至少要(n-1)条,如果一个序列尽量放偶数可以连出(lfloorfrac n2 floor)

如果一边有超过(2)个奇数那就会少一些边,对(n)分奇偶讨论可以得到不可行。

https://agc001.contest.atcoder.jp/submissions/7871320

E BBQ Hard

很久以前写过的顺便写写= =

求一大堆组合数之和,可以化为对每对(i,jin[1,n])((-a_i,-b_i))((a_j,b_j))的方案数

因为对每一对都要做所以直接dp就好了。

https://agc001.contest.atcoder.jp/submissions/3466674

F Wide Swap

最小化(A)的字典序相当于最小化(p_A)的字典序。(反正对的,关于证明弃疗了

那么从(p)上看就是可以交换相邻两个差(ge K)的数

如果有两个数(i<j,|p_i-p_j|<K)那么最后(i)肯定在(j)前面

可以用拓扑序解决,然而边数太多了

每个点(i)只要向右边第一个(a_j>a_i,|a_i-a_j|<K)的和(a_j<a_i,|a_i-a_j|<K)(j)连边即可,可用数归证明后面的边一定会被这两个点连到。

https://agc001.contest.atcoder.jp/submissions/7908880

原文地址:https://www.cnblogs.com/xzz_233/p/11638170.html