@atcoder - ARC077F@ SS
@description@
规定一个字符串为 “偶串” 当且仅当它可以表示成两个相同的字符串连接(如 "xyzxyz" 或 "aaaaaa")。
给定一个仅由小写字母组成的初始偶串 \(S_0\)。我们可以通过在 \(S_i\) 后加最少的字符(至少一个字符)得到新的偶串 \(S_{i+1}\),不难发现 \(S_{i+1}\) 是唯一存在的。
求在 \(S_{10^{100}}\) 中第 l 个字符到第 r 个字符中每个小写字母的出现次数。
@solution@
考虑一个偶串 \(TT\) 怎么加最少的字符成为新的偶串 \(T'T'\):找到 \(T\) 的最大 border \(P\) 与最小周期 \(Q\),将 \(T\) 写作 \(Q + P\),则 \(T' = Q + P + Q\)。
我们考虑已知 \(T\) 怎么快速求 \(T'\) 的最大 border:
如果 \(T\) 是循环串,则 \(T'\) 也是循环串,因此 \(T'\) 的最大 border 长度 = \(|T'| - |Q|\)。
否则,\(T'\) 的最大 border 长度为 \(|Q|\)。
关于第二条结论,首先注意到 \(T'\) 的最大 border 长度 \(\leq |P| + |Q|\) 且 \(\geq |Q|\)。
画一画发现假如 \(T'\) 的最大 border 长度为 L,则 \(T\) 中长度为 L 的前缀存在长度为 \(|Q|\) 的 border,根据弱周期引理可推出矛盾。
关于实现,前一种太简单了不讲;后一种可以发现 \(T_i\) 是 \(T_{i-1}\) 与 \(T_{i-2}\) 的拼接,长度呈斐波那契数列增长(跟指数级差不多),因此递归求解即可。
然后发现前一种情况可以直接用后一种情况的写法,减少代码量。
@accepted code@
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAXN = 200000;
ll a[26], b[26], c[150][26], d[150];
char S[MAXN + 5]; int f[MAXN + 5];
int main() {
int n, m; ll l, r;
scanf("%s%lld%lld", S + 1, &l, &r);
n = strlen(S + 1), m = n / 2;
f[0] = -1, f[1] = 0;
for(int i=2;i<=m;i++) {
int j = f[i - 1];
while( j != -1 && S[i] != S[j + 1] )
j = f[j];
f[i] = j + 1;
}
int p = m - f[m];
for(int i=1;i<=p;i++) c[0][S[i] - 'a']++;
for(int i=1;i<=m;i++) c[1][S[i] - 'a']++;
int k; d[0] = p, d[1] = m;
for(k=1;d[k]<=r;k++) {
for(int j=0;j<26;j++)
c[k + 1][j] = c[k][j] + c[k - 1][j];
d[k + 1] = d[k] + d[k - 1];
}
ll t = r;
for(int i=k;i>=0;i--) {
if( t >= d[i] ) {
for(int j=0;j<26;j++)
a[j] += c[i][j];
t -= d[i];
}
}
for(int i=1;i<=t;i++)
a[S[i] - 'a']++;
t = l - 1;
for(int i=k;i>=0;i--) {
if( t >= d[i] ) {
for(int j=0;j<26;j++)
a[j] -= c[i][j];
t -= d[i];
}
}
for(int i=1;i<=t;i++)
a[S[i] - 'a']--;
for(int i=0;i<26;i++) printf("%lld ", a[i]);
}
@details@
当然关于实现,递推也可以,而且写起来也比较简单。
@atcoder - ARC077F@ SS的更多相关文章
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
- 【arc077f】AtCoder Regular Contest 077 F - SS
题意 给你一个形如"SS"的串S,以及一个函数\(f(x)\),\(x\)是一个形如"SS"的字符串,\(f(x)\)也是一个形如"SS"的 ...
- AtCoder Beginner Contest 066 B - ss
题目链接:http://abc066.contest.atcoder.jp/tasks/abc066_b Time limit : 2sec / Memory limit : 256MB Score ...
- 【ARC077F】SS
Description 如果某个串可以由两个一样的串前后连接得到,我们就称之为"偶串".比如说"xyzxyz"和"aaaaaa"是偶串,而& ...
- 【ARC077F】SS kmp+打表找规律
Description 如果某个串可以由两个一样的串前后连接得到,我们就称之为"偶串".比如说"xyzxyz"和"aaaaaa"是偶串, ...
- 【arc077f】AtCoder Regular Contest 074 F - Lotus Leaves
题意 给定一个n*m的池塘,每个格子上可能有叶子. 从一个叶子出发,可以跳到相同行或相同列的叶子. 问至少去掉多少叶子,使得起点不能到达终点. \(n,m<=100\) 解法 很显然的最小割模型 ...
- AtCoder Grand Contest 008
AtCoder Grand Contest 008 A - Simple Calculator 翻译 有一个计算器,上面有一个显示按钮和两个其他的按钮.初始时,计算器上显示的数字是\(x\),现在想把 ...
- 【atcoder F - Namori】**
F- Namori http://agc004.contest.atcoder.jp/tasks/agc004_f Time limit : 2sec / Memory limit : 256MB S ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
随机推荐
- Excel导出到DataSet
#region 导入excel 返回Dataset public DataSet ExecleDataSet(string filename, string file, string Type) { ...
- Spring 中基于 AOP 的 XML架构
Spring 中基于 AOP 的 XML架构 为了使用 aop 命名空间标签,你需要导入 spring-aop j架构,如下所述: <?xml version="1.0" e ...
- python+selenium 自动化测试框架-学习记录
本人小白一枚,想着把学习时的东西以博客的方式记录下来,文章中有不正确的地方请大佬多多指点!!共同学习 前期准备 安装python3.selenium.下载对应版本的webdriver:安装所需的第三 ...
- OAUTH开放授权
OAUTH开放授权 OAUTH开放授权为用户资源的授权提供了一个安全的.开放而又简易的标准.OAUTH的授权不会使第三方触及到用户的帐号信息例如用户名与密码等,即第三方无需使用用户的用户名与密码就可以 ...
- Qt版本中国象棋开发(四)
内容:走法产生 中国象棋基础搜索AI, 极大值,极小值剪枝搜索, 静态估值函数 理论基础: (一)人机博弈走法产生: 先遍历某一方的所有棋子,再遍历整个棋盘,得到每个棋子的所有走棋情况(效率不高,可以 ...
- [256个管理学理论]006.刺猬效应(Hedgehog Effect)
刺猬效应(Hedgehog Effect) 来自于大洋彼岸的让你看不懂的解释: 刺猬效应(刺猬法则)就是人际交往中的“心理距离效应”.人与人之间都应该保持这条底线,过犹不及. 刺猬效应强调的就是人际交 ...
- 接口(interface)的使用
类实现接口就具有接口的功能 实现可以多实现,实现多个接口 package cm.aff.abst; /* 接口(interface)是与类并行的一个概念 1. 接口可以看做是一个特殊的抽象类,是常量与 ...
- 03_K近邻算法
今天是2020年2月1日星期六,疫情延续,现在确诊人数达到了11821例,艰难困苦,玉汝于成,相信国家的力量!大家齐心协力干一件事,疫情会尽早结束的,武汉加油.前几天整理感知机算法的内容,发现写博客这 ...
- RocketMQ安装及入门
本文是作者原创,版权归作者所有.若要转载,请注明出处. 本文RocketMQ版本为rocketmq-all-4.7.0,系统为win10.请各位去官网下载,也可以留言,我发安装包 RocketMQ安装 ...
- cocos2dx 入门 环境配置
本人立志走游戏开发这条路,很早之前就准备学习cocos2dx,今天终于忙里偷闲入了一下门,把环境配置好了,创建了自己的第一个cocos项目! 一.环境配置 1.下载cocos https://coco ...