Codeforces 乱做

  • \(\texttt{CF1548D1 && D2 Gregor and the Odd Cows}\)

    首先由 \(Pick\) 定理得 \(S = a + \dfrac b 2 - 1\),由于 \(a\) 为奇数,\(S\)\(S \equiv \dfrac b 2\pmod 2\)

    \(Easy\ version\) 中,坐标都是偶数,则由 \(S = \dfrac{x_1(y_2-y_3) + x_2(y_3-y_1) + x_3(y_1 - y_2}{2}\) 可知 \(S \equiv 0 \pmod 2\)

    三角形边上的整点数 \(b = \gcd (|x_1 - x_2|,|y_1-y_2|) + \gcd (|x_1 - x_3|, |y_1 - y_3|) + \gcd (|x_2 - x_3|, |y_2 - y_3|)\) ,则 \(b\equiv 0 \pmod 4\)

    由于 \(x,y\) 都是偶数,有个结论是 \(\gcd (x,y) \equiv \gcd (x\bmod 4,y\bmod 4) \pmod 4\),于是枚举三个顶点 \(\bmod 4\) 后的坐标计数即可,\(4^6\) 种情况。

    \(Hard\ version\) 不保证坐标是偶数,由于 \(S\) 是整数,则 \(b\bmod 2 = 0\),并且三角形三边整点数为 \(3\) 个奇数 或 \(1\)\(2\) 偶。

    枚举三角形的一个端点 \(i\) ,预处理 \(cnt(x,y,z)\) 表示模 \(4\) 意义下与点 \(i\) 连边上的整点数为 \(z\) 的坐标为 \((x,y)\) 的点的数量,这一部分是 \(O(n^2)\) 的。

    然后枚举另外两个点使得两条与 \(i\) 相连的边上的整点数奇偶性相同,然后分类计数,可以发现,三边整点数为 \(3\) 个奇数的会被计算 \(6\) 次,为 \(1\)\(2\) 偶的会被计算两次,最后去重即可,时间复杂度 \(O(4^6n)\)

  • \(\texttt{CF1354G Find a Gift}\)

    交互题。观察到 \(k\le \frac n 2\),可以用若干次(我用了 \(20\) 次)猜出其中一个放石头的盒子,这样猜错的概率大概是 \(2^{20}\) ,然后先特判掉 \(1\) 号盒子放的是否是石头,接着倍增即可。

  • \(\texttt{CF1292D Chaotic V.}\)

    麻了,写了个假做法 \(WA on test 107\),没考虑到选的点 \(P\) 可以不在某个阶乘上,,/ll

    实际上先考虑点 \(1\) ,然后选择最大质因数中出现次数 \(> n/2\) 的质因数,这只有一个,所以直接做就行了。/qd

  • \(\texttt{CF1109D Sasha and Interesting Fact from Graph Theory}\)

    广义 \(Cayley\) 定理:\(n\) 个有标号节点生成一个有 \(s\) 棵树的森林且给定的 \(s\) 个点没有两个点属于同一棵树的方案数个数为 \(sn^{n-s-1}\)

    柿子很好推。

  • \(\texttt{CF1028F Make Symmetrical}\)

    \(A,B\) 关于直线 \(OC\) 对称,则有 \(OA=OB\),因此,满足对称的点在一个圆上,圆上的整点个数不多,直接暴力即可。

  • \(\texttt{CF1149E Election Promises}\)

    博弈论,类似的技巧。对于每个点求出 \(val(u) = MEX\{val(v)|v\in out(u)\}\),按 \(val(u)\) 分类,将同类的 \(h\) 异或起来,若存在某个类异或和 \(>0\),则先手必胜,否则先手必败,证明同样考虑第一步将所有的类的异或和变为 \(0\),然后仿照对手操作。

  • \(\texttt{CF1451F Nullify The Matrix}\)

    博弈论。记 \(s_x\)\(i+j=x\)\(a_{i,j}\) 的异或和,若存在 \(s_x \neq 0\),则先手必胜,否则先手必败。

    证明:若存在 \(s_x \neq 0\),先手第一步将所有的 \(s_x\) 变为 \(0\),然后仿照后手操作,则先手必胜,否则后手仿照先手操作,后手必胜。

  • \(\texttt{CF1451E2 Bitwise Queries (Hard Version)}\)

    构造题。先查询 \(a_1\oplus a_2,a_1\oplus a_3,...,a_1\oplus a_n\),消耗 \(n-1\) 次,剩下两次,然后分类:

    • \(a_1,a_2,...,a_n\) 互不相同,那么直接查询 \(a_1\)\(a_1\oplus a_i = 1\)\(a_i\)\(AND\),可以得到除第 \(0\) 位以外的所有位置,然后类似的可以查到 \(a_1\) 的第 \(0\) 位,消耗 \(2\) 次;

    • 找到任意一组 \(i,j\) 满足 \(a_1\oplus a_i = a_1\oplus a_j\),查询 \(a_i\)\(a_j\)\(AND\) 可以得到 \(a_i\)\(a_j\),再通过之前查的 \(a_1 \oplus a_i\) 计算得到 \(a_1\),消耗 \(1\) 次;

    于是就可以在 \(n+1\) 次之内得到答案。

  • \(\texttt{CF1485D Multiples and Power Differences}\)

    构造题。计算器算一下可以知道 \(lcm(1,2,...,16) = 720720\),先将矩阵黑白染色,黑色填 \(720720\),白色对 \([1,16]\) 打个表可以找到合法的 \(720720-x_i^4\),实际也可以 \(720720-i^4\)

  • \(\texttt{CF1209F Koala and Notebook}\)

    很妙的一个思路:将编号 \(i\) 拆出十进制位,记作 \(p_1,p_2,...,p_w\),则 \((u,v,i)\) 可以表示为 \(u\xrightarrow{p_1}\xrightarrow{p_2}...\xrightarrow{p_w} v\),然后就可以分层跑 \(bfs\) 了。

  • \(\texttt{CF741C Arpa’s overnight party and Mehrdad’s silent entering}\)

    可以考虑加强限制,钦定 \(2i,2i+1\) 选不同的食物,连边,情侣间也连边,这样是没有奇环的(交替走情侣边和普通边),直接二分图染色即可构造方案。

  • \(\texttt{CF449C Jzzhu and Apples}\)

    从大到小考虑每个质因数 \(x\) ,将 \(x\) 的倍数中还未匹配的数找出来两两匹配,个数为奇数时将 \(2x\) 保留,留给质因数 \(2\) 匹配,可以证明这是最优的。

  • \(\texttt{CF1503D Flip the Cards}\)

    很妙的题。 首先若存在 \(a_i,b_i\le n\) 显然无解,先判掉。

    然后考虑将 \(a_i,b_i\) 中较小的放在前面,按 \(a_i\) 从小到大排序,记作 \((i,f(i))\)

    对于一种解,必然是将 \((i,f(i))\) 分成两个递减的子序列,将其中一个子序列 \(i,f(i)\) 交换并逆序排列拼回去得到的,于是考虑将代价最小化。

    有一个难注意到的性质是:若 \(i\) 满足 \(\min\limits_{j=1}^i f(j) > \max\limits_{j=i+1}^n f(j)\),则可以将序列分成 \([1,i]\)\((i,n]\) 两端且决策互不干扰。

    利用这个性质,可以对每个段贪心,开两个栈,每次挑栈顶较小且大于当前 \(f(i)\) 的放进去,若放不进去则无解。

    (两个栈都可以放时,有 \(f(i)\) 小于两个栈顶, 这一段中 \(>i\) 的位置必然存在一个 \(j\) 满足 \(f(j)\) 大于至少一个栈顶,因而 \(f(j) > f(i)\),若 \(f(i)\) 放入较大的栈顶,则最后会导致 \(f(j)\) 放不进去,因此决策是唯一的。)

  • \(\texttt{CF1479C Continuous City}\)

    有趣的构造题,考虑二进制。

    先构造 \([1,2^k](k\ge 0)\),对于 \(i\in [2,k+2]\),连边 \((i,j,2^{i-2})(i < j)\)\((1,i,1)\)

    接着考虑 \([1,R](2^{k}<R<2^{k+1})\),新建一个点 \(n = k + 3\),连边 \((1,n,1)\) ,对于 \(i\in [2,k+2]\) 连边 \((i,n,1+\sum\limits_{j=i+1}^{k+2}2^{j-2}[(R-1)\&2^{j-2}])\) 就行了。

    最后对于 \([L,R](L > 1)\),将所有的点编号 \(+1\) ,连边 \((1,2,L-1)\)

  • \(\texttt{CF1479D Odd Mineral Resource}\)

    类似于 \(\texttt{CF1418G Three Occurrences}\),给每个颜色随机一个权值 \(v\),查询树上 \(u\rightarrow v\) 的路径上的权值异或和即可判断是否有出现奇数次的颜色,时间复杂度 \(\mathrm{O(n\log n)}\)

    另一种解法是树上莫队 + 分块,对颜色分块,莫队移动指针时将出现奇数次的颜色丢进对应的块里,查询时暴力扫可能的颜色,若找到直接返回,否则删去这个颜色,分析一下时间复杂度可以知道这是 \(\mathrm{\Theta(n\sqrt n + q\sqrt n)}\) 的。

  • \(\texttt{CF1479E School Clubs}\)

    不会,弃了, \(\texttt{鞅与停时定理}\)

  • \(\texttt{CF1614 D1 && D2: Divan and Kostomuksha}\)

    \(b_i = \gcd(a_1,a_2,...,a_i)\) ,有个易证的性质是 \(b_{i+1}|b_i\),那么可以考虑 \(dp_x\) 表示 \(b_1 = x\) 时的 \(\sum b_i\),枚举 \(x\) 的约数 \(d\),则有转移:

    \[dp_x \longleftarrow dp_{d}+cnt(x)(x-d) \]

    其中 \(cnt(x)\)\(a\) 序列中被 \(x\) 整除的数的个数,这个可以 \(\mathrm{O(v\ln v)}\) 做高维后缀和,其中 \(v\)\(\max\{a_i\}\),这样就可以过 \(D1\) 了。

    \(D2\) 换成 \(Dirichlet\) 后缀和即可,时间复杂度 \(\mathrm{O(v\log\log v)}\)

  • \(\texttt{CF1614E Divan and a Cottage}\)

    先设 \(ans_i(t) = t + i\),开棵线段树维护每个点的函数,对于 \(T_i\),将 \(< T_i\) 的函数值全部加一, \(> T_i\) 的函数值全部减一,易知这个函数是不降的,修改时二分出区间即可,时间复杂度 \(\mathrm{O(n\log^2n)}\),写线段树上二分可以做到 \(1\log\)

posted @ 2021-12-25 16:17  klii  阅读(86)  评论(0)    收藏  举报