AGC047简要题解

AGC047A Integer Product

给定 \(n\) 个浮点数 \(a_i\) ,问有多少组数对 \((i,\ j)\) 满足 \(a_i\cdot a_j\) 是整数

  • \(n\leq2\times10^5\)
  • \(a_i\) 小数点后只有不超过 \(9\) 位数

\(a_i\) 的小数点前部分可以丢掉,将小数点后部分看成 \(\frac k{2^a\times5^b}\) 的形式,其中 \(k\) 是整数, \(a,\ b\) 要尽量小

然后即求满足 \(a_i+a_j\ge0,\ b_i+b_j\ge0\) 的数对个数,值域很小暴力即可


AGC047B First Second

给定 \(n\) 个串 \(S_i\) ,定义对串 \(T\) 的一次变换为删掉 \(T\) 的第一个或第二个字符,问有多少个二元组 \((i,\ j)\) 满足能够通过对 \(S_i\) 进行若干次变换使得其等于 \(S_j\)

  • \(n\leq2\times10^5\)
  • \(\displaystyle\sum|S_i|\leq10^6\)

\(S_i\) 能够进行若干次变换使得其等于 \(S_j\) ,当且仅当 \(S_j\)\(S_i\) 的后缀,或 \(S_j\) 去掉第一个字符后是 \(S_i\) 的后缀、且 \(S_j\) 的第一个字符在 \(S_i\) 的前 \(|S_i|-|S_j|+1\) 个字符中出现过

把所有串倒着插入 trie 中搞一搞即可


AGC047C Product Modulo

我没有多项式基础

留坑待填


AGC047D Twin Binary Trees

有两棵点数同为 \(n\) 的满二叉树,第一棵树的第 \(i\) 个叶节点向第二棵树的第 \(A_i\) 个节点连了一条特殊边

在所有边构成的图上,一个环是合法的,当且仅当它是简单环,并且恰好经过两条特殊边

定义一个合法环的权值为它所经过的所有点的编号的乘积

求所有简单环的权值之和 \(\bmod10^9+7\)

\(n<2^{18}\)

做法一:

枚举特殊边 \((u,\ v)\) ,设环经过的另一个特殊边为 \((u_0,\ v_0)\) ,其中 \(u,\ u_0\) 在第一棵树上, \(v,\ v_0\) 在另一棵

接着枚举 \((u,\ u_0)\)\((v,\ v_0)\)它们在各自树中的 lca

大概套个二维数点就得到了一个时间 \(O(n\log^3 n)\)优秀做法

大概搞一个线段树合并就可以优化到 \(O(n\log^2 n)\)

做法二:

枚举 \((u,\ u_0)\) 的 lca \(w\)

枚举 \(w\) 左子树中的所有叶子节点 \(i\) ,其中 \(i\) 在另一棵树上的对应点为 \(j\) ,将 \(j\) 的所有祖先 \(p\) 累加 \(i\)\(p\) 的最短路径上的节点的乘积

枚举 \(w\) 右子树中的所有叶子节点 \(i\) ,其中 \(i\) 在另一棵树上的对应点为 \(j\) ,枚举 \(j\) 的所有祖先 \(p\) ,用 \(i\)\(p\) 的最短路径与 \(p\) 的兄弟的信息统计对答案造成的贡献

大概就做到了时间 \(O(n\log^2n)\) ,空间线性


AGC047E Product Simulation

有一个序列 \(a_0,\ a_1,\ \cdots,\ a_n\) ,初始时 \(a_0=A,\ a_1=B;\ a_2=a_3=\cdots=a_n=0\)

你可以执行至多 \(q\) 次操作,每次操作有两种:

  1. \(+\ i\ j\ k\) :令 \(a_k=a_i+a_j\)
  2. \(<\ i\ j\ k\) :令 \(a_k=[a_i<a_j]\)

你需要构造一种操作序列使得,无论 \(A,\ B\) 是任何非负整数,执行完所有操作后 \(a_2=A\cdot B\)

  • \(n,\ q=2\times10^5\)
  • \(A,\ B\in[0,\ 10^9]\)

假设 \(A,\ B\) 中至少有一个非零

则通过 \(A<A+A+B+B\) 就能构造出元素 \(1\)

通过 \(1\) 自加就能得到所有 \(2\) 的幂次

考虑将 \(A,\ B\) 表示为二进制数

\(bit\) 降序考虑,考虑等式 \(f_{bit}=[cur+2^{bit}<A+1]\) ,若 \(f_i=1\) 就将 \(cur\) 加上 \(2^{bit}\) ,即可求出 \(A\) 的所有二进制位;同理可求得 \(B\) 二进制下每一位 \(g_{bit}\)

现在即求 \(\displaystyle\sum_{i,\ j}f_ig_j2^{i+j}\)

枚举 \(i,\ j\)\(2^{i+j}\) 部分已经预处理了,现在只用处理两个 \(01\) 变量 \(x,\ y\) 的与操作,实际上就是 \(1<x+y\)

总操作数 \(O(\log^2A)\)

可以发现 \(A=B=0\) 时不用特判


AGC047F Rooks

留坑待填

posted @ 2020-08-10 23:41  cnJuanzhang  阅读(605)  评论(0编辑  收藏  举报