2019 牛客国庆集训派对day1-C Distinct Substrings(exkmp+概率)
链接:https://ac.nowcoder.com/acm/contest/1099/C
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
Special Judge, 64bit IO Format: %lld
题目描述
输入描述:

输出描述:
For each test case, print an integer which denotes the result.
备注:
For the second test case, h(1) = h(2) = 2, h(3) = 3.
题目的意思是:给一串数字,然后在后面添加一个数字x问你新增了多少子串h[x],求这个数字x取从1到m时 3x*h[x]%mod的异或和;
思路:考虑新添加一个数字,增加的子串的数量为所有以该数字结尾的后缀,但是会出现前面已经出现过的子串,所以我们需要算出在没有添加之前出现过多少以该数字结尾的字符串,考虑将这些数反过来,然后用exkmp求出,next[i]: T[i~n-1]和T的最长公共前缀;对于1~m的每一个数字,我们只要求出其最大值即可,然后n-最大值就是这个数字的答案,将所有的答案异或就是最后的答案了。
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
const int N=1e6+;
int x[N],y[N],w[N],n,m,nxt[N],ex[N];
void pre_exkmp()
{
nxt[]=n;
int j=;
while(j+<n&&x[j]==x[j+])j++;
nxt[]=j;
int k=;
for(int i=;i<n;i++)
{
int p=nxt[k]+k,t=nxt[i-k];
if(i+t<p)nxt[i]=t;
else
{
j=p-i<?:p-i;
while(i+j<n&&x[i+j]==x[j])j++;
nxt[i]=j;k=i;
}
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<=n-;++i) scanf("%d",&x[n-i-]);
pre_exkmp();
for(int i=;i<=m;++i) w[i]=-;
nxt[n]=;
for(int i=;i<=n-;++i) w[x[i]]=max(nxt[i+],w[x[i]]);
int ans=,p=;
for(int i=;i<=m;++i)
{
p=1ll*p*%mod;
ans^=1ll*p*(n-w[i])%mod;
}
printf("%d\n",ans);
}
return ;
}
2019 牛客国庆集训派对day1-C Distinct Substrings(exkmp+概率)的更多相关文章
- 2019牛客国庆集训派对day1(A, B E F K)
链接:https://ac.nowcoder.com/acm/contest/1099#question A:可知符合条件的图中间肯定存在一个由1构成的矩形,找到由1构成矩形的边界,判断出现的1的数量 ...
- 2019牛客国庆集训派对day1 K题 双向链表练习题 splay区间翻转
题目链接: 解法: 先建n颗平衡树,合并的时候将a中最右的结点翻转到根节点,b中最左的结点翻转到根节点,对合并后的根节点进行标记. #include <bits/stdc++.h> usi ...
- 2019牛客国庆集训派对day1
C 存每个值存在的位置,枚举末尾的值,再枚举前面的值,哈希二分出最长相同的,即剩下的为不同的 D \(f_{i,j,k}\)为前i位,最后一个3因子在j,次因子在k G bitset处理有多少位置符合 ...
- 2019牛客国庆集训派对day5
2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...
- 牛客国庆集训派对Day1 L-New Game!(最短路)
链接:https://www.nowcoder.com/acm/contest/201/L 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...
- 牛客国庆集训派对Day1 L New Game!(堆优化dijkstra+建图)
链接:https://ac.nowcoder.com/acm/contest/201/L来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言2097 ...
- 计算几何板子题【2019牛客国庆集训派对day7——三角形和矩形】【多边形相交的面积】
链接:https://ac.nowcoder.com/acm/contest/1112/J来源:牛客网 题目描述 Bobo 有一个三角形和一个矩形,他想求他们交的面积. 具体地,三角形和矩形由 8 个 ...
- 2019牛客国庆集训派对day7 A 2016
链接:https://ac.nowcoder.com/acm/problem/52800来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...
- 牛客国庆集训派对Day1.B.Attack on Titan(思路 最短路Dijkstra)
题目链接 \(Description\) 给定\(n,m,C\)及大小为\((n+1)(m+1)\)的矩阵\(c[i][j]\).平面上有\((n+1)(m+1)\)个点,从\((0,0)\)编号到\ ...
随机推荐
- 005.Kubernetes二进制部署kubectl
一 部署 kubectl 1.1 安装kubectl [root@k8smaster01 ~]# cd /opt/k8s/work [root@k8smaster01 work]# wget http ...
- Python面向对象 | 静态方法 staticmethod
静态方法是类中的函数,不需要实例.静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作.可以理解为,静态方法是个独立的.单纯的 ...
- 浅谈oracle中for update 和 for update nowait 和 for update wait x的区别
在执行update的时候,不加nowait/wait x的时候,当数据记录被锁住的时候,会一直处于等待状态,直到资源锁定被释放: 而加了nowait的时候,马上就会进行反馈“ORA-00054错误,内 ...
- 自建yum仓库,该仓库为默认仓库
YUM REPO: http://content.example.com/rhel7.0/x86_64/dvd 创建自建yum REPO文件: vim /etc/yum.repos.d/redhat. ...
- Prometheus+Altermanager钉钉报警
Prometheus+Altermanager钉钉报警 一.添加钉钉机器人 参考钉钉官方文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq ...
- CSS RESET —— 浏览器样式重置
CSS Reset 1. CSS Reset为什么存在? 只要您的客户存在使用不同浏览器(ie,firefox,chrome等)的可能,那你就不得不从完美的理想状态回到现实,因为不同核心的浏览器对CS ...
- <meta name="viewport" content="width=device-width,initial-scale=1.0">的意思
content属性值 : width:可视区域的宽度,值可为数字或关键词device-width height同理width intial-scale:页面首次被显示是可 ...
- Openlayers 实现轨迹播放/暂停/重新播放/从点击处播放/提速/减速
说明: 我的需求是需要实现轨迹播放/暂停/重新播放/从点击处播放,因此封装了一个类 解决方案: 1.初始化:主要是处理一下图层以及数据,通过插值构造一个全局数组 /** * @description ...
- 读取FANUC进给倍率
读取FANUC机床的倍率信息需要用到 FOCAS链接库. 根据FANUC的连接手册可以知道,进给倍率信号存在 Gn012寄存器中.在机床上更改倍率开关,发现G0012寄存器值变化,经验证G0012就是 ...
- MySQL 、PDO对象
目录 1, singleton 2, pdo与db 3, singleton获取pdo 4, pdo实现db增删改查 5, pdo异常处理exception 6, pdo预处理prepare 7, p ...