当前位置:网站首页>2022 Hangzhou Electric Multi-School 1st Session 01
2022 Hangzhou Electric Multi-School 1st Session 01
2022-08-05 05:12:00 【The wonderful sauce of eating peppercorns】
题意:设F(i)表示sA prefix for the string[1…i]The intersection length of all intervals in k的倍数的boardnumber of strings,求 ∏ i = 1 ∣ s ∣ ( f ( i ) + 1 ) \prod_{i=1}^{|s|}{(f(i)+1)} ∏i=1∣s∣(f(i)+1)
做法:z函数,差分
先求出s串的z函数(exkmp),设z[i]表示s串的z函数.Each prefix can be usedboardConvert each suffix to the prefix of the original stringlcp,Consider each suffix[i…n]的贡献,
画个图,容易发现当z[i]>=i时,At this time this suffix is the same as the original stringlcppart only contributes.
此时第2*(i-1)+k,2*(i-1)+2k,2*(i-1)+3k…Every prefix can count towards this part of the contribution.Just make a difference,But distance isk.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define pii pair<int ,int >
#define pb(v) push_back(v)
#define all(v) v.begin(),v.end()
#define int long long
#define inf 0x3f3f3f3f
#define INF 0x7f7f7f7f7f7f7f7f
#define endl "\n"
#define fi first
#define se second
#define ls p<<1
#define rs p<<1|1
#define lson p<<1,l,mid
#define rson p<<1|1,mid+1,r
#define AC return 0
#define ldb long double
const int N=2e6+5;
const int mod=998244353;
const double eps=1e-8;
ll nxt[N];
void qnxt(char *c){
int len = strlen(c);
int p = 0, k = 1, l;
nxt[0] = len;
while(p + 1 < len && c[p] == c[p + 1]) p++;
nxt[1] = p;
for(int i = 2; i < len; i++){
p = k + nxt[k] - 1;
l = nxt[i - k];
if(i + l <= p) nxt[i] = l;
else{
int j = max(0ll, p - i + 1ll);
while(i + j < len && c[i + j] == c[j]) j++;
nxt[i] = j;
k = i;
}
}
}
int lb,tag[N];
char b[N];
ll ans;
signed main(){
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
IOS;
int T;cin>>T;
while( T-- ){
cin >> b;
int k;cin>>k;
qnxt(b);
lb = strlen(b);
//枚举以i开始的后缀,Contribution difference
for(int i=0 ;i<lb ;i++){
int X = nxt[i];
int id = i+1;//真实下标
//Find the far left and the far rightpre[1...i]算贡献
if( X>=id && X-id+1 >= k){
tag[2*(id-1) + k]++;//左
int t = (X-id+1)/k*k;
if( 2*(id-1) + t + k <= lb ) tag[2*(id-1) + t + k]--;
}
}
int ans=1;
_for(i,1,lb){
if( i-k>=1) tag[i] = tag[i] + tag[i-k];
ans = ans * (tag[i]+1)%mod;
}
cout<<ans<<endl;
_for(i,0,lb+k){
tag[i]=0;
}
}
return 0;
}
边栏推荐
- 【cesium】加载并定位 3D Tileset
- OFDM 十六讲 5 -Discrete Convolution, ISI and ICI on DMT/OFDM Systems
- 使用二维码解决固定资产管理的难题
- Shell(4) Conditional Control Statement
- How to identify false evidence and evidence?
- 【cesium】3D Tileset 模型加载并与模型树关联
- entry point injection
- for..in和for..of的区别
- 【cesium】元素高亮显示
- 2022牛客多校第四场C.Easy Counting Problem(EGF+NTT)
猜你喜欢
【cesium】元素高亮显示
Day019 方法重写与相关类的介绍
for..in和for..of的区别
【转】什么是etcd
Multi-threaded query results, add List collection
Please write the SparkSQL statement
ansible各个模块详解
Algorithms - ones and zeros (Kotlin)
[Student Graduation Project] Design and Implementation of the Website Based on the Web Student Information Management System (13 pages)
"Recursion" recursion concept and typical examples
随机推荐
Homework 8.4 Interprocess Communication Pipes and Signals
[cesium] 3D Tileset model is loaded and associated with the model tree
基于Web的商城后台管理系统的设计与实现
二叉树基本性质+oj题解析
软件管理rpm
Shell(4)条件控制语句
ansible各个模块详解
Basic properties of binary tree + oj problem analysis
upload上传图片到腾讯云,如何上传图片
[Surveying] Quick Summary - Excerpt from Gaoshu Gang
Flutter学习4-基本UI组件
C语言-大白话理解原码,反码和补码
Develop a highly fault-tolerant distributed system
Redis哨兵模式配置文件详解
How can Flutter parent and child components receive click events
【cesium】元素高亮显示
Excel Paint
大学物理---质点运动学
Flutter learning 5-integration-packaging-publish
flex布局青蛙游戏通关攻略