题解-CF1065E Side Transmutations
\(n\) 和 \(m\) 和 \(k\) 和序列 \(b_i(1\le i\le m,1\le b_i\le b_{i+1}\le \frac n2)\)。对于字符串 \(s\),如果选其 \(b_i\) 前缀和 \(b_i\) 后缀翻转并交换能变成字符串 \(s'\),则 \(s,s'\) 是相等的。求有多少个长度为 \(n\) 的字符串,字符集大小为 \(k\),互不相等。答案 \(\bmod 998244353\)。
数据范围:\(2\le n\le 10^9\),\(1\le m\le \min(\frac n2,2\cdot 10^5)\),\(1\le k\le 10^9\)。
听神仙说这是群论,是 \(\tt Polya\),小蒟蒻没有听说过,但是手推出来这题了。
既然蒟蒻啥都不会,那么就慢慢做这题。
把字符串分成 \(2m+1\) 段。
如 \(m=2\) 字符串就是 \(\overrightarrow{A}\overrightarrow{B}\overrightarrow{C}\overrightarrow{D}\overrightarrow{E}\):
\(\overrightarrow{S}\) 指的是一个有顺序的字符串。
\(\overrightarrow{A}\) 表示 \(s_{1\to b_1}\)。
\(\overrightarrow{B}\) 表示 \(s_{b_1+1\to b_2}\)。
\(\overrightarrow{C}\) 表示 \(s_{b_2+1\to n-b_2}\)。
\(\overrightarrow{D}\) 表示 \(s_{n-b_2+1\to n-b_1}\)。
\(\overrightarrow{E}\) 表示 \(s_{n-b_1+1\to n}\)。
- 解决 \(m=1\) 的情况:
\]
如果 \(\overrightarrow{A}=\overleftarrow{C}\):\(k^{n-b_1}\) 种。
如果 \(\overrightarrow{A}\not=\overleftarrow{C}\):\((k^n-k^{n-b_1})\cdot 2^{-1}\) 种。
答案为 \(k^{n-b_1}+(k^n-k^{n-b_1})\cdot 2^{-1}=(k^n+k^{n-b_1})\cdot 2^{-1}\) 种。
- 解决 \(m=2\) 的情况:
\]
如果 \(\overrightarrow{A}=\overleftarrow{E}\&\overrightarrow{B}=\overleftarrow{D}\):\(k^{n-b_2}\) 种。
如果 \(\overrightarrow{A}\not=\overleftarrow{E}\&\overrightarrow{B}=\overleftarrow{D}\):\((k^{n-b_2+b_1}-k^{n-b_2})\cdot 2^{-1}\) 种。
如果 \(\overrightarrow{A}=\overleftarrow{E}\&\overrightarrow{B}\not=\overleftarrow{D}\):\((k^{n-b_1}-k^{n-b_2})\cdot 2^{-1}\) 种。
如果 \(\overrightarrow{A}\not=\overleftarrow{E}\&\overrightarrow{B}\not=\overleftarrow{D}\):\((k^n-k^{n-b_1}-k^{n-b_2+b_1}+k^{n-b_2})\cdot 2^{-2}\) 种。
答案为 \((k^n+k^{n-b_1}+k^{n-b_2+b_1}+k^{n-b_2})\cdot 2^{-2}\) 种。
小蒟蒻于是就发现规律了:
令集合 \(st=\{b_1,b_2-b_1,...,b_m-b_{m-1}\}\)。
\]
看似诡异,但是其实这个一把这个式子裂开就发现是可以合并的:
2^m Ans=&~~~~~k^{n-st_1-st_2-\cdots-st_m}\\
&+k^{n-st_2-st_3-\cdots-st_m}+k^{n-st_1-st_3-\cdots-st_m}\\
&~~~~~~~~~~~~~~+k^{n-st_1-st_2-st_4-\cdots-st_m}+\cdots+k^{n-st_1-st_2-\cdots-st_{m-1}}\\
&+\vdots\\
&+k^n\\
=&k^{n-st_1-st_2-\cdots-st_m}(k^{st_1}+1)(k^{st_2}+1)\cdots(k^{st_m}+1)\\
=&k^{n-b_m}(k^{st_1}+1)(k^{st_2}+1)\cdots(k^{st_m}+1)\\
\end{split}
\]
\]
然后就做完了。因为还要 \(\bmod 998244353\),所以时间复杂度为 \(\Theta(m\log mod)\)。
- 代码
#include <bits/stdc++.h>
using namespace std;
//Start
typedef long long ll;
typedef double db;
#define mp(a,b) make_pair(a,b)
#define x first
#define y second
#define b(a) a.begin()
#define e(a) a.end()
#define sz(a) int((a).size())
#define pb(a) push_back(a)
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
//Data
const int N=2e5;
const int mod=998244353;
int n,m,k,b[N+7];
//Pow
int Pow(int a,int x){
if(!a) return 0; int res=1;
for(;x;a=(ll)a*a%mod,x>>=1)if(x&1) res=(ll)res*a%mod;
return res;
}
//Main
int main(){
scanf("%d%d%d",&n,&m,&k),k%=mod; //这句不加 Wrong on test 11
for(int i=1;i<=m;i++) scanf("%d",&b[i]);
int res=1;
for(int i=1;i<=m;i++) res=(ll)res*(Pow(k,b[i]-b[i-1])+1)%mod;
res=(ll)res*Pow(k,n-b[m])%mod;
res=(ll)res*Pow(Pow(2,m),mod-2)%mod;
printf("%d\n",res);
return 0;
}
祝大家学习愉快!
题解-CF1065E Side Transmutations的更多相关文章
- CF1065E Side Transmutations
link 题意: 给你一个长为m的序列$b_i$,定义两个字符串a,b相同当前仅当a执行以下操作后能变成b:($\rm{prefix}(x,y)$及$\rm{suffix}(x,y)$定义为串x的前/ ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
随机推荐
- 2018.1.15复习_ css+js
[1]几个常见的css标签:--------------------------------------------------background-color; 设置背景颜色background-p ...
- SQL Server 常用近百条SQL语句(收藏版)
1. sqlserver查看实例级别的信息,使用SERVERPROPERTY函数 select SERVERPROPERTY ('propertyname') 2. 查看实例级别的某个参数XX的配置 ...
- PHP一些不一样的思路
大多数来自p牛 SQL注入(left join) 源代码 <?php $link = mysqli_connect('localhost', 'root', 'root'); mysqli_se ...
- tp5 上传视频方法
控制器调用 /** * 视频上传 */ public function video_add(){ if (request()->isPost()){ $video = $_FILES['vide ...
- 最全JVM与性能调优知识点总结,看看哪些是你还没掌握的?
前言 JVM调优是每个高级程序员的必修课,在本章中,我会从发展过程以及核心价值来剖析JVM的体系结构.为了让大家更好的理解JVM的工作机制, 我会在讲解完运行时数据区之后,再通过一个类的加载过程到这个 ...
- 如何用FL Studio将乐器组合与分层
有过音乐制作经历的小伙伴应该知道,我们在用以FL Studio20为代表的音乐编曲软件制作音乐时,往往需要在同一节奏点添加多种音效,这样可以使音乐听起来更具层次感.正因如此,我们就需要不断添加音符,就 ...
- H5,Css小姐又作画了
用H5和CSS3做出自己名字缩写. <html> <head> <meta charset="utf-8"> <title>name ...
- 2020.11.26 IntellJ idea激活码失效解决方法(最新idea激活码及安装参数!)
今天是2020年11月26号,小伙伴们是不是有发现自己的idea激活码失效了,不瞒大家,小编也是一个JAVA开发者,到了公司打开idea,然后就发现事情不妙,经过1个多小时的摸索,终于把最近的安装参数 ...
- jvm参数与生产配置
堆内存分配:JVM初始分配的内存由-Xms指定,默认是物理内存的1/64JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制:空 ...
- 【mq读书笔记】如何保证三个消息文件的最终一致性。
考虑转发任务未成功执行,此时消息服务器Broker宕机,导致commitlog,consumeQueue,IndexFile文件数据不一致. commitlog,consumeQueue遍历每一条消息 ...