ARC064(2020.7.23)

A

直接贪心即可。

B

手玩样例可以猜出这样一个结论,如果两端字符相同,如果字符串长度为奇数那么后手赢,否则先手赢,两端字符不同则相反。证明的话先从特殊情况开始入手,假如只存在一种字符出现了多次(除去两端字符的出现次数)因为保证了开始的字符串是合法的,那么这种出现多次的字符出现次数一定不超过字符串长度的一半,于此同时我们要明确一个观点,两个人肯定不会让自己在当前很快输掉,这是显然的,因此两个人都会尽可能往后走,可以发现如果将出现多次的字符全部拿走那么最终的胜利状态将是固定的,那么固定胜利的这个人一定会将这些字符全部拿走因为字符数量少于总长的一半因此他是可以做到的,所以这种特殊情况下上面的结论是正确的。再考虑多种字符出现多次的情况,同样的固定赢的那个人同样可以取走出现多次的那些字符以保证自己必胜,因此上面的结论就正确了。

C

将原问题中的圆,起点终点都抽象成 \(n + 2\) 个点,两圆之间的距离就是圆心距离减去两圆半径(特殊地如果小于 \(0\) 那么距离为 \(0\)),起点终点和其他圆的距离就是两点之间的距离减去圆的半径,注意还需要考虑从起点直接走到终点的情况,因此还需要在起点和终点之间连边边权为两点间距离,最后跑一遍最短路即可。

D

看到题目以后我们猜测,是不是所有回文串对答案的贡献都是其长度呢?手玩之后可以发现这个是错的,比如 \(abaaba\) 对答案的贡献显然只有 \(3\),不难发现这种串是有循环节的,那我们又可以大胆猜测所有回文串对答案的贡献是否是其最小循环节的长度呢?实际上这也是不对的,比如 \(abbaabba\) 对答案的贡献其实只有 \(2\) 因为操作两次以后会是一个新的回文串我们也会枚举到,但是我们发现如果最小循环节长度为奇数,那么貌似贡献都是最小循环节长度而如果长度为偶数贡献都是长度除以 \(2\),事实上这个结论是正确的,下面我们来证明这个结论。

下面令 \(r_s\) 为 \(s\) 的反串,最小循环节长度为 \(d\)。

  • 一个回文串的每个循环节也是回文串

这个根据定义很容易可以得出证明。

  • 每进行一次操作相当于对最小循环节进行了一次操作

这个结论也比较显然,手玩可以证明

  • 一个串不论进行多少次操作其最小循环节长度不变

根据上一条性质可以发现,每次我们最小循环节的长度都不会变大,如果我们在某次操作后最小循环节长度变小了,根据我们最开始的定义这个变小的最小循环节的串一定可以再经过若干次操作变回原串,此时最小循环节长度变大,矛盾。

  • 最小循环节长度不同的两个串不会互相影响

上个结论的推论

  • 对一个串执行 \(k\) 次操作和执行 \(d - k\) 次操作后的两个串互为反串

根据性质一二不难得出证明。

  • 一个串如果对答案的贡献会记重当且仅当存在一个 \(k\) 使得 \(k = d - k\)

考虑答案什么时候会被记重,当且仅当执行一些操作后重新变回一个回文串,根据性质一五容易证明。

根据性质 \(4, 5\) 就验证了上面我们对每个回文串对答案贡献的猜想。下面我们只需要考虑如何统计最小循环节为 \(d\) 的回文串数量即可。不难发现一个回文串只要确定前 \(\lceil \frac{d}{2} \rceil\) 个位置的数就可以确定一个回文串,且前 \(\lceil \frac{d}{2} \rceil\) 可以任意填数,但是直接这样计数是不正确的,因为我们要统计的是最小循环节为 \(d\) 的答案,而这样算出来的回文串数量是存在循环节长度为 \(d\) 的数量,因此我们还需要枚举 \(d\) 的约数,将其约数的答案减去即可。

Atcoder ARC-064的更多相关文章

  1. 【题解】Atcoder ARC#90 F-Number of Digits

    Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...

  2. AtCoder ARC 076E - Connected?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c 平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次.现在用一条曲线将一对相同的 ...

  3. AtCoder ARC 076D - Built?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...

  4. AtCoder ARC 082E - ConvexScore

    传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c 本题是一个平面几何问题. 在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n} ...

  5. Atcoder ARC 082C/D

    C - Together 传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a 本题是一个数学问题. 有一个长度为n的自然数列a[1..n],对于每一 ...

  6. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

  7. 【题解】Atcoder ARC#96 F-Sweet Alchemy

    首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...

  8. AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision

    题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...

  9. 【题解】Atcoder ARC#67 F-Yakiniku Restaurants

    觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...

  10. 【题解】Atcoder ARC#85 E-MUL

    ……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...

随机推荐

  1. Second Order Optimization for Adversarial Robustness and Interpretability

    目录 概 主要内容 (4)式的求解 超参数 Tsiligkaridis T., Roberts J. Second Order Optimization for Adversarial Robustn ...

  2. 应用TYPE-C外围电源管理IC IM2605

    应用于TYPE-C外围集成同步4开关Buck-Boost变换器的电源管理IC   IM2605 IM2605描述 IM2605集成了一个同步4开关Buck-Boost变换器,在输入电压小于或大于输出电 ...

  3. 基于Spring MVC + Spring + MyBatis的【超市会员管理系统】

    资源下载: https://download.csdn.net/download/weixin_44893902/22035329 一. 语言和环境 实现语言:JAVA语言. 使用:MyEclipse ...

  4. 如何跳出springboot的service层中某一个方法?

    有一个需求,就是中断某个方法中的for循环 目前的做法是:for循环中,增加if判断,如果满足条件就return,会中断这个方法 for (int i = 0; i < totalIndex; ...

  5. Linux操作系统RedHat6.5安装

    1.说明 安装Linux操作系统Red Hat 6.5, 安装镜像为rhel-server-6.5-x86_64-dvd.iso. 2.开始安装 在BIOS里设置成从光驱启动, 服务器上电后会加载光驱 ...

  6. MySQL存储过程入门基础

    创建存储过程无参语法: delimiter // create procedure 函数名() begin 业务逻辑 end // call 函数名() 通过函数名调用存储过程 创建存储过程有参与法: ...

  7. Python 使用timeit模块计算时间复杂度时系统报“invalid syntax”错误

    最近在看算法相关的文档 在时间复杂度环节 遇到一个实例: 导入timeit模块后,通过Timer定时器计算两种不同处理方法的时间复杂度 错误代码及报错如下图所示: 仔细查阅 发现from__main_ ...

  8. let var const 区别

    let es6 语法 let是作用域是块级的,即{}内的范围 如果未声明变量就使用的话,报错ReferenceError,而var则会报错undefined(不存在变量提升) 只要块级作用域内存在le ...

  9. 实验 5 :OpenFlow 协议分析和 OpenDaylight 安装

    实验 5 :OpenFlow 协议分析和 OpenDaylight 安装 一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接: 通过抓包获 ...

  10. Bootstrap实战 - 注册和登录

    一.介绍 注册和登录在社交和商业网站中是必不可少的一个部分. 二.知识点 2.1 标签页 2.1.1 基础标签页 标签页的使用与导航栏类似,同时都依赖于基础样式 nav,不同的是附加样式变成了 nav ...