Atcoder ARC-064
ARC064(2020.7.23)
直接贪心即可。
手玩样例可以猜出这样一个结论,如果两端字符相同,如果字符串长度为奇数那么后手赢,否则先手赢,两端字符不同则相反。证明的话先从特殊情况开始入手,假如只存在一种字符出现了多次(除去两端字符的出现次数)因为保证了开始的字符串是合法的,那么这种出现多次的字符出现次数一定不超过字符串长度的一半,于此同时我们要明确一个观点,两个人肯定不会让自己在当前很快输掉,这是显然的,因此两个人都会尽可能往后走,可以发现如果将出现多次的字符全部拿走那么最终的胜利状态将是固定的,那么固定胜利的这个人一定会将这些字符全部拿走因为字符数量少于总长的一半因此他是可以做到的,所以这种特殊情况下上面的结论是正确的。再考虑多种字符出现多次的情况,同样的固定赢的那个人同样可以取走出现多次的那些字符以保证自己必胜,因此上面的结论就正确了。
将原问题中的圆,起点终点都抽象成 \(n + 2\) 个点,两圆之间的距离就是圆心距离减去两圆半径(特殊地如果小于 \(0\) 那么距离为 \(0\)),起点终点和其他圆的距离就是两点之间的距离减去圆的半径,注意还需要考虑从起点直接走到终点的情况,因此还需要在起点和终点之间连边边权为两点间距离,最后跑一遍最短路即可。
看到题目以后我们猜测,是不是所有回文串对答案的贡献都是其长度呢?手玩之后可以发现这个是错的,比如 \(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的更多相关文章
- 【题解】Atcoder ARC#90 F-Number of Digits
Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...
- AtCoder ARC 076E - Connected?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c 平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次.现在用一条曲线将一对相同的 ...
- AtCoder ARC 076D - Built?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...
- AtCoder ARC 082E - ConvexScore
传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c 本题是一个平面几何问题. 在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n} ...
- Atcoder ARC 082C/D
C - Together 传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a 本题是一个数学问题. 有一个长度为n的自然数列a[1..n],对于每一 ...
- 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...
- 【题解】Atcoder ARC#96 F-Sweet Alchemy
首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...
- AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision
题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...
- 【题解】Atcoder ARC#67 F-Yakiniku Restaurants
觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...
- 【题解】Atcoder ARC#85 E-MUL
……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...
随机推荐
- HashMap及LinkedHashMap
HashMap是Map族中最为常用的一种,也是Java Collection Framework的重要成员.HashMap和双向链表合二为一即是LinkedHashMap.所谓LinkedHashMa ...
- CS5211替代CH7511B|设计DP转LVDS转接板|替代CH7511B
CH7511B是一款DP转lvds屏转换芯片CH7511B是一款eDP转LVDS转换芯片.CH7511B将嵌入式DisplayPort信号转换为LVDS(低压差分信号).通过CH7511B的高级解码/ ...
- 编写Java程序_输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
要求: 输入一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 实现代码: package kaoshi; import java.util.Scanner; pu ...
- CSS基础 清除浮动
1.单伪元素清除法:清除浮动 .clearfix::after{ content: '.'; display: block; c ...
- .NetCore下构建自己的文件服务管理(UosoOSS)
Web开发系统文件默认存储在wwwroot目录下面,现在越来越多的系统服务化了,UI也更加多元化,当然文件可以用第三方的文件服务,但是这里准备文件分离出来构建自己的文件服务配合数据库表来实现(Uoso ...
- 使用 spring security 中的BcryptPasswordEncoder对象对用户密码进行加密
一.引入security启动器 在子工程中直接引入,不用指定版本号 二.在启动类中把BCryptPasswordEncoder对象注入到容器中 三.在service 层注入 四. 调用encode方法 ...
- vant引入及配置
1. vant 官网 https://youzan.github.io/vant/#/zh-CN/quickstart 2. 通 npm 安装 npm i vant -S 3.安装 babel-plu ...
- 默认安装的phpMyAdmin会存在哪些安全隐患
利用: 1. 利用慢查询日志写入webshell 2. phpMyAdmin的setup目录暴露一些隐私信息 3. 通过phpMyAdmin修改php的ini配置 ...
- Linux系统下,Redis的安装与启动
1.安装Redis之前,我们先介绍下Redis: (1)Redis是什么?都有哪些特点? 概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键 ...
- Docker 与 K8S学习笔记(十 二)容器间数据共享
数据共享是volume的关键特性,今天我们来看一下通过volume实现容器与host.容器与容器之间共享数据. 一.容器与host共享数据 在上一篇中介绍到的bind mount和docker man ...