0.「AGC 024D」Isomorphism Freak

  设直径为 \(d\), 则最小同构系大小显然是 \(d/2+1\), 我们只需要求出满足这个大小的最少叶子数. 我们确定一个点或者一条边为中心, 向外 BFS, 同层结点的度数需要最终相同, 因此此时最少叶子树就是每层度数最大值的乘积. 这个中心点不一定和直径有关, 但… \(n\) 实在是太小了, 全部枚举一边就行, \(\mathcal O(n^2)\) 可过.

1.「APIO 2018」「洛谷 P4631」选圆圈

  好像在 127 的论文里见过这个网格化的 trick?

  设当前最大半径为 \(R\), \(L\) 为任意满足 \(L>2R\) 的阈值. 那么, 我们在坐标系上按 \(L\) 为边长划分网格后, 两个圆相交的必要条件就是它们圆心所在的网格八联通. 若将 \(L\) 保持在 \((2R,4R)\) 的范围, 我们就能以 \(\log\) 次重构的代价限定出一个良好的检查范围. 正好, 大圆间会相互消除, 所以无效检查次数并不多. 用 std::map 之类的暴力维护网格信息, 可以做到 \(\mathcal O(n\log^2n)\).

2.「UR #2」「UOJ #31」猪猪侠再战括号序列

  构造 (((...))), 最坏 \(n\) 次交换.

3.「UR #3」「UOJ #48」核聚变反应强度

  \(\text{sgcd}\) 一定是 \(\gcd\) 除上 \(a_1\) 的某个素因子, 直接枚举就行. 复杂度 \(\mathcal O(\sqrt V+q(\log V+\omega(a_1)))\).

4.「HAOI 2018」「洛谷 P4493」字串覆盖

  挺 dirty 的题. 模式串长的在 fail 树的主席树上二分, 模式串短的按长度随便怎么预处理一下就行, 带一堆 \(\log\) 或根号应该都能过.

5.「CF 1817A」Almost Increasing Subsequence

  呜… 大晚上脑子还是转得不快.

  考虑最优子序列的选取, 我们可以把原序列划分为若干个下降段: \([a_1,\cdots,a_{k_1}][a_{k_1+1},\cdots,a_{k_2}]\cdots\). 显然全局最优选择是 \([a_1][a_{k_i},a_{k_i+1}][a_n]\). 前后两项特判, 中间的 \([a_k,a_{k+1}]\) 维护出下标, 区间查询时二分一下能取到的段即可. \(\mathcal O(q\log n)\).

6.「CF 1817B」Fish Graph

  读题读成选导出子图, 纠结那个 "exactly \(2\) extra edges" 纠结了一年.

  选导出子图就是蠢蠢题了, 枚举关键点, 从其邻接点出发 DFS, 到第一次遇到另一个邻接点时取出该环, 再加上其他两条边就行. \(\mathcal O(nm)\).

7.「CF 1817C」Similar Polynomials

  赋值的欲望在燃烧.

  一个简洁做法. 设 \(A(x)=\sum_{i=0}^na_ix^i\), \(B(x)\) 同理. 那么:

\[A(x+s)=B(x)\\
\Rightarrow
\begin{cases}
\left.[A^{(n)}(x+s)=B^{(n)}(x)]~\right|_{~x=0}\Rightarrow a_n=b_n,\\
\left.[A^{(n-1)}(x+s)=B^{(n-1)}(x)]~\right|_{~x=0}\Rightarrow na_ns+a_{n-1}=b_{n-1}.
\end{cases}
\]

  用 Lagrange 插值的式子求出 \(a_n,a_{n-1},b_{n-1}\) 即可. 题目保证 \(s\) 存在, 可见我们的算法已经给出了唯一可能的答案. \(\mathcal O(n)\).

8.「CF 1817D」Toy Machine

Wrong answer on pretest 1

  OI 无关手玩题. 注意到 LDRU 可以让左侧的块安全地 (不会被流放到右边去) 转圈, 我们不断重复这个操作, 就能把第 \(k~(k\le(n-1)/2)\) 个块移到最左边.

  \(k>(n-1)/2\) 复杂那么一点点. 我大概也是乱胡胡出来了, 所以没办法编 motivation. 这里直接给出构造.

  • Step 0. 考虑如下局面:

    我们现在希望把 i 移到左上角.

  • Step 1. 类似上一个部分, 重复 RDLU 直到 i 右侧无方块:

  • Step 2. 重复 LDLU 把所有方块聚集到左侧, 同时 i 右侧仍然无方块:

  • Step 3. RDL, 游戏结束.

  每种操作的次数都可以根据最初的 \(k\) 直接算出来. 操作次数是 \(4n+\mathcal O(1)\) 的.

9.「LR #9」「LOJ #560」Menci 的序列

  最 key 的地方在于看一眼特殊性质: "不存在两个相邻的 +". 先想想这该怎么做?

  每次要不 \(\times2\) 要不 \(+1\), 我们一定不会让最高 bit 移出上限, 但我们又必须最大化最高 bit. 另外一方面, \(+1+1\) 连选显然没必要. 因此, 当且仅当答案数字最低 bit 为 \(0\), 当前是一个 \(\times2\), 且后面的 \(\times2\) 数量已经足够我们顶到上限时, 我们才会放弃这个 \(\times2\), 期待后面有个 \(+1\) 让数变大. 贪心扫一遍即可.

  回到原问题. 拓展刚才的做法, 我们用 * 把序列分为若干段. 先将每一段中的 + 尽量进位, 得到一个和刚才同质的情况, 一样地贪心. 不过当一个段仅剩两个 + 时, 放弃进位而保持当前位置有 bit 就更优了. 还是 \(\mathcal O(n)\) 扫一遍就行.

10.「UR #3」「UOJ #49」铀仓库

  二分答案, 枚举起点, 双指针最左最右碰到的箱子检查答案即可. \(\mathcal O(n\log \sum a)\), 实现起来其实不太舒服. (

11.「UR #3」「UOJ #50」链式反应

  • Link & Submission.
  • 「A.数学-生成函数」「A.数学-多项式」

  裂变过程是一个二叉树上挂叶子的结构, 很容易想到用 GF 刻画树上的组合情景. 令 \(A(z)=\sum_{i\in A}\frac{z^i}{i!}\), \(G(z)\) 表示答案关于初始原子个数的 EGF, 那么

\[G'=\frac{1}{2}AG^2+1.
\]

注意第一个原子一定是根, 所以全局排列数是 \((n-1)!\), 左侧需要求导对齐指标.

  这个形式的 ODE 是 Riccati 方程的特例, 根据一些结论, 初等函数解是存在的, Wolfram 给出的结果是:

\[G=\frac{\sqrt 2\tan\left(\frac{1}{2}\sqrt{2A}(k+x)\right)}{\sqrt A}.
\]

(其实也能算, 能算的!)

  当然, 常规做法就直接分治 FFT 解就行. 复杂度 \(\mathcal O(n\log^2n)\).

12.「JSOI 2018」「洛谷 P4518」绝地反击

  二分答案嘛, 余弦定理 (差点忘了 ?!) 求出每个出发圆交目标圆周的弧度区间, 显然我们可以钦定多边形存在一个落在区间边界的顶点, 枚举这个顶点就能生成多边形, 继而得到每个出发点能走到的顶点区间. 这样, 问题就转化成环上区间覆盖, 判断是否存在完美匹配. 在 Hall 定理的判据下最容易挂掉的显然是顶点区间, 扫描线维护判断即可. \(\mathcal O(n^2\log n\log V)\).

13.「BZOJ #2567」篱笆

  感觉这个思路的题没咋做过捏? 本题核心大概是从贪心过程的 DP 中生成不等关系, 同时对 "\(\min\{\}\ge\)" 形式的关系进行枚举放缩.

  仅讨论全局答案. 设 \(p_i\) 表示从左到右第 \(i\) 个栅栏最终的中心点位置, 显然栅栏的中心点的相对位置不会改变. 我们容易得到 \(p\) 的递推:

\[p_i=\min\{p_{i-1}+2r,a_i+x\}\ge a_i-x.
\]

我们需要满足所有的 \(\ge\). 拆开 \(\min\):

\[\forall i\le j,~a_i+x+2r(j-i)\ge a_j-x,
\]

因此

\[x\ge\frac{\max_{i\le j}\{a_j-a_i-2r(j-i)\}}{2}.
\]

  对于链的情况, 我们还要求:

\[p_1\le r\Leftrightarrow(\forall i,~a_i-x-2(i-1)\le r);\\
p_n\ge \ell-r\Leftrightarrow(\forall i,~a_i+x+2(n-i)r\ge\ell-r).
\]

  对于环的情况, 只需要倍长区间满足第一个判据即可. 这些判据涉及的区间信息都能用线段树维护. \(\mathcal O(n+q\log n)\).

14.「洛谷 P9308」#1f1e33

\[\newcommand{\lcm}[0]{\operatorname{lcm}}
\begin{align}
f(n) &= \sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n[i+j+k=n]\lcm(i,\gcd(j,k))\\
&= \sum_{i=1}^{n-2}\sum_{d\mid (n-i)\land d<n-i}\lcm(i,d)\varphi((n-i)/d)\\
&= \sum_{i=1}^n\sum_{d\mid i}[d\neq i]\frac{(n-i)d}{\gcd(n,d)}\cdot\varphi(i/d)\\
&= n\sum_{d=1}^n\frac{d}{\gcd(n,d)}S_1(n/d)-\sum_{d=1}^n\frac{d^2}{\gcd(n,d)}S_2(n/d)\\
&=n\sum_{T\mid n}\sum_{t\mid T}\mu(t)t\sum_{d=1}^{n/T}dS_1(n/(dT))-\sum_{T\mid n}T\sum_{t\mid T}\mu(t)t\sum_{d=1}^{n/T}d^2S_2(n/(dT)).
\end{align}
\]

  上面是草稿. 解释一下:

  \((2)\) 中 \(\varphi((n-i)/d)\) 即 \(\sum_{j,k}[j\perp k]\) 化简的结果.

  \((3)\) 中 \(i\) 转而枚举 \((2)\) 中的 \(n-i\); 实际上应当有 \(2\le n-i\le n-1\), 但是 \([d\neq i]\times(n-i)\) 已经处理掉这一条件带来的非法贡献了; \(\gcd(n-i,d)=\gcd(n-i+kd,d)=\gcd(n,d)\).

  \((4)\) 中,

\[S_1(m)=\sum_{i=2}^m\varphi(i),~S_2(m)=\sum_{i=2}^mi\varphi(i),
\]

注意其求和下指标, 这里已经去除了 \(d=i\) 的贡献.

  \((5)\) 中, 通过莫反引入了 \(T,t\) 的枚举. \(T/t\) 枚举钦定的 \(\gcd\), \(t\) 枚举是 \(n,d\) 的公因子但没被 \(T/t\) 枚举的部分, \(T\) 即二者乘积.

  最后的式子中, 乘积式的最后一项求和可以写作 \(T_1(n/T)\) 和 \(T_2(n/T)\) 的形式. 到此, 预处理所有需要的中间函数, 可以 \(\mathcal O(n\log n)\) 求解.

15.「UR #4」「UOJ #51」元旦三侠的游戏

  和 Candy Piles 没有区别. 注意即使是 powl 精度也会被打爆.

Solution Set - “也许我们早已经共鸣在那约定之地”的更多相关文章

  1. ENode框架Conference案例分析系列之 - 事件溯源如何处理重构问题

    前言 本文可能对大多数不太了解ENode的朋友来说,理解起来比较费劲,这篇文章主要讲思路,而不是一上来就讲结果.我写文章,总是希望能把自己的思考过程尽量能表达出来,能让大家知道每一个设计背后的思考的东 ...

  2. html5设计原理(转)

    转自:   http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...

  3. X32,X64,X86 代表什意义

    X32,X64,X86是什么意思 各代表什么:X86指32位,X64指64位,现在用户最多的是XP,但win7是趋势,发展很快,建议你装个win7 32位的系统,下载的话地方很多,官方安装原版和gho ...

  4. 【实用技巧】取消Win7开机账户的手动选择

    因为前面碰到的一些事情,稍有感慨. 关于win7的一些小技巧都不是什么很有技术含量东西,或者说很浅显.我说一个技巧,也许很多人都知道,也许也早有人说过.但我想说的是我不是在炫耀什么,我只是想分享一些我 ...

  5. 学习HTML5必读之《HTML5设计原理》

    引子:很久前看过的一遍受益匪浅的文章,今天再次转过来,希望对学习HTML5的朋友有所帮助. 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HT ...

  6. java程序员修炼之道

    今天在论坛里看到了一位工作10年的java大牛总结的java程序员修炼之道,看完后给出的评价是:字字玑珠,深入人心,猛回头,自己一无是处··· 大牛告诉我们应该好好学习与修炼以下知识与技能 Java语 ...

  7. 函数:我的地盘听我的 - 零基础入门学习Python019

    函数:我的地盘听我的 让编程改变世界 Change the world by program 函数与过程 在小甲鱼另一个实践性超强的编程视频教学<零基础入门学习Delphi>中,我们谈到了 ...

  8. 如何通过Visual Studio来管理我们的数据库项目

    某日的一个早晨,产品早上来告诉我说要把之前变更的一个功能更改回原来的设计内容,作为程序员大家都最讨厌需求来回反复变更,但是没有办法,苦逼的程序员最终还是继续要改,毕竟是给老板打工的,但是发现我们之前的 ...

  9. REdis CPU百分百问题分析

    REdis版本:4.0.9 运行环境:Linux 3.10.107 x86_64 gcc_version:4.8.5 结论:是一个BUG,在4.0.11版本中被作者antirez所修复 现象: 1)  ...

  10. WC、KOI2017小随想..

    自从WC之后就一直想说些什么.. 嗯比较零碎.. Part A WC,我通过我的双眼看到了我想要的 嗯,就是在上面道出自己的想法.自己的思想 也是自己在十二月的迷茫后看到的曙光吧.. 感动.激动.难以 ...

随机推荐

  1. 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现五

    一.前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势.传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速.便捷需求.这些问题不 ...

  2. 4.使用二进制方式搭建K8S集群

    使用二进制方式搭建K8S集群 注意 [暂时没有使用二进制方式搭建K8S集群,因此本章节内容不完整... 欢迎小伙伴能补充~] 准备工作 在开始之前,部署Kubernetes集群机器需要满足以下几个条件 ...

  3. mysql与mongodb、redis的性能对比,包含源代码

    最近因为工作需要,所以研究了一下mongodb,但是不知道它的真实性能怎么样,所以对比mysql做了一些测试,现在只是插入操作,更新还没来得及弄,贴出来和大家分享一下(已经补齐redis部分) 1.数 ...

  4. An expression evaluator

    An expression evaluator  Download source code (17 kb) Two weeks ago, I saw an article on codeproject ...

  5. 基于JDBC的数据库连接池高效管理策略

    在基于JDBC的数据库应用开发中,数据库连接的管理是一个难点,因为它是决定该应用性能的一个重要因素.本文在对数据库连接进行透彻分析的基础上,提出并实现了一个高效的连接管理策略,使得开发高性能的数据库应 ...

  6. 移动端NES网页模拟器(1)

    前言 移动端浏览器是没有实体键盘的,想要操作游戏就必须为其设置虚拟按键,通过虚拟按键(按钮)的标识与实体键盘的keyCode进行绑定,来达到想要的效果. 这个随笔只封装NES游戏手柄右边的按键,不包含 ...

  7. 生成条形码二维码DataMatrix条码.EAN码.39码.交叉25码.UPC码.128码.93码.ISBN码.Codabar等

    1.引用Spire.Barcode 在Nuget包中安装Spire.Barcode 2.生成条形码 //创建 BarcodeSettings对象 BarcodeSettings settings = ...

  8. [AGC029D] Grid game题解

    这题很显然可以用贪心来解. 由于先手不动一定会让局数更少,所以先手要能动就动. 而后手一定是希望他的石子可以撞到一个障碍物上,这样先手就无法移动了,后手就可以让局数更少. 因为先手一定会能动就动,所以 ...

  9. 【Python】【爬虫】爬取小说5000章,遇到的爬虫问题与解决思路

    爬虫问题分析 回顾 之前写了一个爬取小说网站的多线程爬虫,操作流程如下: 先爬取小说介绍页,获取所有章节信息(章节名称,章节对应阅读链接),然后使用多线程的方式(pool = Pool(50)),通过 ...

  10. Nginx日志重定向到标准输出

    背景静态站点使用`docker`部署时,希望`nginx前台启动`的同时可以将错误日志和访问日志全部重定向到标准输出,便于采集和处理! 实现只需要修改`nginx.conf`中`3行`关于日志的配置就 ...