Wannafly挑战赛 22

爆零祭

T1

这题第一反应gcd啊
所以就把每个a[i]对m取模
然后求它们的gcd
即res = gcd(a[1] % m, a[2] % m, ... , a[n] % m)
ans = 1 + (m - 1) / res;
给res判个零 是零直接输出一
后来发现这么干的话 对于数据
3 10
9 9 9
gcd是9哇 但是所有的模数都能取到
就无厘头改成了res = min(res, m - res) 乍一看貌似很有道理
但是不会证 也wa凉凉啊

比赛后看到题解说是gcd(m, a[1], a[2], .., a[n])
并不会证。。慌张ing

想一想一开始把a[i] % m
是因为(a[i] + a[j]) % m = (a[i] % m + a[j] % m) % m;
就觉得 比如 所有a[i] % m都是偶数 最后和就不会是奇数
但是naive了。。。模数要是是奇数 结果不是照样能取奇数么
现在就可以看作有a[1], a[2], ... , a[n], m这n + 1个数
可以把a[1] ~ a[n]任意加 或者减去数个m
求能得到多少个小于m的值
所以取gcd(m, a[1], a[2], ..., a[n])

某神犇表示可以用扩展欧几里得理解【就是下面那个链接的博主


T2

看到DAG,看到计数,想到拓扑排序
如果一个点前面有k条通向自己的边为’
那么它后面大写字母就有k + 1种取法
如果它后面有k条出路为'
'
那么它前面为'.'的边的结果要乘k + 1
一开始要把边变成点
正逆向拓扑 统计'_'
然后大写字母和'.'询问前后点

但当时就是脑抽 只算了k == 1的情况

另附某AK大神的题解

考虑先处理出以每一个点出发/结尾的只经过空格的路径条数,
然后借着之前的那个处理出以每一个点结尾/出发的只经过一个头/尾字符(其他都是空格)的路径条数。
然后就可以方便的统计答案了。
by-zhouzhendong-
文章来源


T3

瑟瑟发抖.jpg & 毫无思路.jpg
上面那个链接的大神说结论是

证明链接
---

T4

和角公式
初三党表示凉凉

猜你喜欢

转载自www.cnblogs.com/hjmmm/p/9496753.html