[BZOJ 5330][SDOI2018] 反回文串
怎么说呢,一道不可多得的反演题吧,具体解释之后再补
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
typedef long long ll;
;
ll mul(ll x,ll y,ll p) {
x%=p; y%=p;
return (x*y-(ll)((long double)x/p*y+0.5)*p+p)%p;
}
ll _pow(ll x,ll n,ll p) {
ll ret=;
,x=mul(x,x,p)) ) ret=mul(ret,x,p);
return ret;
}
ll tp[]={2LL,3LL,5LL,7LL,13LL,61LL};
bool MR(ll n) {
) return false;
rep(i,,) if(n==tp[i]) return true;
rep(i,,) ) return false;
rep(i,,) {
ll tmp=n-;)) tmp>>=;
ll s=_pow(tp[i],tmp,n);
&&s!=&&tmp!=n-) tmp<<=,s=mul(s,s,n);
&&!(tmp&)) return false;
}
return true;
}
ll PR(ll n,ll c) {
ll i=,k=2LL,x,y; x=y=1LL+rand()%(n-);
) {
x=(mul(x,x,n)+c)%n;
ll d=__gcd((y-x+n)%n,n);
&&d!=n) return d;
if(x==y) return n;
;
}
}
int op[maxn],len,cnt,T;
ll n,P,K,ans,gt[maxn];
inline void fct(ll n) {
) return;
if(MR(n)){gt[++len]=n;return;}
ll p=n;
;p==n;--c) p=PR(p,c);
fct(p); fct(n/p);
}
ll fpow(ll x,ll n,ll p) {
ll ret=;
,x=x*x%p)
) ret=ret*x%p;
return ret;
}
ll g(ll n) {,P);}
ll f(ll n) {?n%P:(n>>)%P;}
inline void dfs(int dp,ll d,ll pro) {
) {
)&&(d&)==) return;
(ans+=1LL*g(n/d)*f(n/d)%P*pro%P)%=P;
return;
}
dfs(dp+,d,pro); pro=1LL*pro*(+P-gt[dp]%P)%P;
rep(i,,op[dp]) d*=gt[dp],dfs(dp+,d,pro);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("25.in","r",stdin);
#endif
scanf();
while(T--) {
scanf("%lld%lld%lld",&n,&K,&P);K%=P;
len=cnt=;++cnt;
memset(gt,,,sizeof(op));
fct(n);
sort(gt+,gt++len);
rep(i,,len) {
;
++op[cnt];
}
ans=;dfs(,1LL,1LL);printf("%lld\n",ans);
}
;
}

[BZOJ 5330][SDOI2018] 反回文串的更多相关文章
- BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...
- [BZOJ5330][SDOI2018]反回文串
luogu bzoj sol 枚举一个长度为\(n\)为回文串,它的所有循环位移都可以产生贡献. 但是这样算重了.重复的地方在于可能多个回文串循环同构,或者可能有的回文串经过小于\(n\)次循环位移后 ...
- [SDOI2018]反回文串
题意 问有多少个长度为\(N\)且字符集大小为\(K\)的字符串可以通过回文串旋转 (把第一个字符移到最后)若干次得到.\(K\le N≤10^{18}\) 做法 ARC64F的加强版 设\(h(d) ...
- 【SDOI2018】反回文串(【ARC064 F】Rotated Palindromes 加强版)
题意 给你一个正整数 \(n\),求有多少字符集为 \(1\) 到 \(k\) 之间整数的字符串,使得该字符串可以由一个长度为 \(n\) 的回文串循环移位得到. ARC原题 \(100\%\) 的数 ...
- BZOJ 3676: [Apio2014]回文串
3676: [Apio2014]回文串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2013 Solved: 863[Submit][Status ...
- bzoj 3676: [Apio2014]回文串 回文自动机
3676: [Apio2014]回文串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 844 Solved: 331[Submit][Status] ...
- 字符串(马拉车算法,后缀数组,稀疏表):BZOJ 3676 [Apio2014]回文串
Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...
- ●BZOJ 3676 [Apio2014]回文串
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3676 题解: 后缀数组,Manacher,二分 首先有一个结论:一个串的本质不同的回文串的个 ...
- 「SDOI 2018」反回文串
题目大意: 求字符集大小为$k$长度为$n$的经循环移位后为回文串的数量. 题解: 这题是D1里最神的吧 考虑一个长度为$n$回文串,将其循环移位后所有的串都是满足要求的串. 但是显然这样计算会算重. ...
随机推荐
- Unity ios、android、pc一键打包(一)
http://www.cnblogs.com/miaoshujiang/p/5289223.html http://blog.csdn.net/ynnmnm/article/details/36774 ...
- linux内核被加载的过程
二,linux内核被加载的过程 一,linux安装时遇到的概念解析 内核必须模块vmlinz(5M左右)不认识硬盘,原本是需要写跟loader中一样的内容,来加载非必要模块. 内核非必要的功能被编译为 ...
- Luogu 4159 [SCOI2009]迷路
BZOJ 1297 应当是简单题. 发现边权的数量很小,所以我们暴力把一个点拆成$9$个点,然后把$(x, i)$到$(x, i + 1)$连边,代表转移一次之后可以走回来:对于每一条存在的边$(i, ...
- LightOJ 1282 Leading and Trailing (数学)
题意:求 n^k 的前三位和后三位. 析:后三位,很简单就是快速幂,然后取模1000,注意要补0不全的话,对于前三位,先取10的对数,然后整数部分就是10000....,不用要,只要小数部分就好,然后 ...
- C# JackLib系列之字体使用
字体的使用一般我们都是使用系统字体,这样比较方便,直接 Font font=new Font("微软雅黑",16f,FontStyle.Bold); 但是当我们用到一个系统没有的字 ...
- idea无法下载源码(Cannot download sources)
有网上说,在命令行项目根目录下,执行如下命令下载: mvn dependency:resolve -Dclassifier=sources 我试着没有效果. 但是在本地仓库中,找到要下载的目录,删除以 ...
- 编写高质量代码改善C#程序的157个建议——建议4: TryParse比Parse好
建议4: TryParse比Parse好 如果注意观察除string外的所有基元类型,会发现它们都有两个将字符串转型为本身的方法:Parse和TryParse.以类型double为例,这两个方法最简单 ...
- MongoDB整理笔记のMapReduce
MongDB的MapReduce相当于MySQL中的“group by”,所以在MongoDB上使用Map/Reduce进行并行“统计”很容易. 使用MapReduce要实现两个函数Map函数和Red ...
- DB2触发器简单例子
db2使用版本9.7 创建A .B两个表,A表数据有更新.删除.插入时,将A表ID记录放入B表 1.create table A (id varchar(5),name varchar(30)); c ...
- screen工具
1.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...