Description

​ 如果某个串可以由两个一样的串前后连接得到,我们就称之为“偶串”。比如说“xyzxyz”和“aaaaaa”是偶串,而“ababab”和“xyzxy”则不是偶串。

​ 对于一个非空串SS,我们定义f(S)f(S)是在SS后面添加一些字符得到的最短偶串。比如f(f('abaaba')=)='abaababaab'。容易证明,对于一个非空串SS,f(S)f(S)是唯一的

​ 现在给定一个由小写英文字母构成的偶串SS,你需要求出f10100(S)f10100(S),并统计计算结果的第ll个字符到第rr个字符中,每个字母出现了多少次

​ 其中,f10100(S)f10100(S)是指f(f(f(...f(S)...)))f(f(f(...f(S)...))),式子中共有1010010100个ff

Input

第一行输入串SS

第二行两个数l,rl,r

Output

对于每个字母,输出一个数字表示答案,两个数字之间应有一个空格

Sample Input

Sample #1
abaaba
6 10 Sample #2
xx
1 1000000000000000000 Sample #3
vgxgpuamkvgxgvgxgpuamkvgxg
1 1000000000000000000

Sample Output

Sample #1
3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Sample #2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000000000000000000 0 0 Sample #3
87167725689669676 0 0 0 0 0 282080685775825810 0 0 0 87167725689669676 0 87167725689669676 0 0 87167725689669676 0 0 0 0 87167725689669676 141040342887912905 0 141040342887912905 0 0

HINT

2≤|S|≤2×10^5

1≤l≤r≤10^18

本题采用subtask。

  • 存在30%的数据,满足|S|≤20
  • 存在50%的数据,满足|S|≤200

Sol

对于一个串,我们设为“SS”,它的最短周期为“T"(也就是S由T循环组成且最后一个T可以不完整),以”abaaba“举例,我们发现:

S->aba T->ab

aba|aba->abaab|abaab->abaababa|abaababa->abaababaabaab|abaababaabaab

即S|S->ST|ST->STS|STS->STSTS|STSTS。

这是一个斐波那契数列的形式,我们可以对每种字母单独求,因为fib数列到80就会爆1e18,所以时间复杂度不会爆炸,具体地,我们统计每种字母在S中出现次数的前缀和,然后递归计算,把l-1或者r分成很多fib数列的形式,若不满|S|,则直接返回。

Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
char s[200005];ll len,slen,tlen,sum[30][200005],nex[200005],l,r;
ll solve(ll now,int n)
{
if(now<=len) return sum[n][now];
ll f1=sum[n][slen],f2=sum[n][len],l1=slen,l2=len,tf,tl;
while(l1+l2<now) tf=f2,tl=l2,f2+=f1,l2+=l1,f1=tf,l1=tl;
return f2+solve(now-l2,n);
}
main()
{
scanf("%s%lld%lld",s+1,&l,&r);len=strlen(s+1)/2;
for(int i=2,j=0;i<=len;i++)
{
while(j&&s[i]!=s[j+1]) j=nex[j];
if(s[j+1]==s[i]) nex[i]=++j;
}
slen=len-nex[len];
for(int i=0;i<26;i++) for(int j=1;j<=len;j++)
{
sum[i][j]=sum[i][j-1];
if(s[j]-'a'==i) sum[i][j]++;
}
for(int i=0;i<26;i++) printf("%lld ",solve(r,i)-solve(l-1,i));
}

【ARC077F】SS kmp+打表找规律的更多相关文章

  1. 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用

    转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html    ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...

  2. 【ZOJ】3785 What day is that day? ——KMP 暴力打表找规律

    转自:http://www.cnblogs.com/kevince/p/3887827.html 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这么一说大家心里肯定有数了吧,“不就是nex ...

  3. HDU 4731 Minimum palindrome 打表找规律

    http://acm.hdu.edu.cn/showproblem.php?pid=4731 就做了两道...也就这题还能发博客了...虽然也是水题 先暴力DFS打表找规律...发现4个一组循环节.. ...

  4. hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)

    Nim or not Nim? Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  5. HDU 5753 Permutation Bo (推导 or 打表找规律)

    Permutation Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...

  6. HDU 4861 Couple doubi (数论 or 打表找规律)

    Couple doubi 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/D Description DouBiXp has a ...

  7. HDU2149-Good Luck in CET-4 Everybody!(博弈,打表找规律)

    Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  8. HDU 5795 A Simple Nim(SG打表找规律)

    SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...

  9. hdu_5894_hannnnah_j’s Biological Test(打表找规律)

    题目链接:hdu_5894_hannnnah_j’s Biological Test 题意: 有n个不同的位置围成一个圈,现在要安排m个人坐,每个人至少的间隔为k,问有多少种安排 题解: 先打表找规律 ...

随机推荐

  1. Flask之性能

    5.5 性能 一.不同角度的网站性能 普通用户认为的网站性能 网站性能对于普通用户来说,最直接的体现就是响应时间.用户在浏览器上直观感受到的网站响应速度,即从客户端发送请求,到服务器返回响应内容的时间 ...

  2. [转]C#开发微信公众平台-就这么简单

    本文转自:http://www.it165.net/pro/html/201403/11102.html 写在前面 服务号和订阅号 URL配置 创建菜单 查询.删除菜单 接受消息 发送消息(图文.菜单 ...

  3. Mesh Filter & Mesh Render

    [Mesh Filter] The Mesh Filter takes a mesh from your assets and passes it to the Mesh Renderer for r ...

  4. 2-2+CPU多级缓存-乱序执行优化

  5. 【FZU2278】YYS

    题意 这里有n种卡片,如果你想得到一张新的卡片,你需要花费W枚硬币来抽一张卡片.每次只能抽一张.所有的卡片出现的概率都是1/n,你每天可以得到1枚硬币.初始时候没有硬币也没有卡片.每W天,你就会抽一张 ...

  6. 使用FileReader与FileWriter读写数据

    -------------siwuxie095                         工程名:TestFileRW 包名:com.siwuxie095.filerw 类名:FileReade ...

  7. 记一篇Python学习的简易版教程

    廖雪峰的教学博客https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143178 ...

  8. C++之shared_ptr总结

    转自 http://blog.csdn.net/u013696062/article/details/39665247 Share_ptr也是一种智能指针.类比于auto_ptr学习.所以推荐先学习a ...

  9. mysql for visual

    http://dev.mysql.com/downloads/file.php?id=458484

  10. sed 之 & 符号

    sed 之 & 符号 摘自:https://blog.csdn.net/jasonliujintao/article/details/53509620 & 这个符号,其实很有用,在对相 ...