A:元素周期表
各种瞎搞随便碾过……
正解你谷有题解
考试的时候瞎搞一通就A了
发现对于一个图 我们可以先让某一行全部摆满
对于剩下的行
如果该行有至少一个元素 那么就可以生成该行所有的元素
如果该行一个元素都没有 那么至少要放一个 才能使该行放满
所以就是要求怎么摆满第一行
这个东西随便瞎搞就可以了……
开一个队列 用bfs
将能生成的全部生成
然后如果该行还有剩余的无法生成
就加入一个元素 然后再让该元素生成本行元素
直到本行元素全部生成完毕
然后直接去扫每一行
如果当前行没有元素 让ans++
B:gcd
稍微带点莫比乌斯反演那味儿
很容易可以想到要维护num[i] 表示 i因子在当前出现的数中 出现了几次
然后想到容斥
和当前数互质的个数就是总个数减去与也含有当前数的某个因子的个数 加上含有两个的 减去含有三个的
所以维护一个g[i] 表示gcd是i的倍数的数对有多少个
f[i]表示gcd恰好是i的数对有多少个
显然(g[i]=sumlimits_{i|d} * f[d])
这东西就很莫比乌斯了
(f[i]=sumlimits_{i|d}mu(frac{d}{i})g(d))
我们要求的就是f[1] 所以每次修改一个数
只要维护g[i]就好了
而g[i]等于(num[i]*(num[i]-1)/2)
所以每次加入或删除一个数
只要枚举它的因数
然后更新num,g,和ans