题解-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或 ...
随机推荐
- bluestore对象挂载到系统进行提取
前言 之前在filestore里面,pg是直接暴露到文件系统的,也就是可以直接进去查看或者拷贝,在极端情况下,多个osd无法启动,pg无法导出的时候,那么对pg内部对象的操作处理,是可以作为最后恢复数 ...
- ceph unfound objects 处理
ceph Vol 45 Issue 1 1.unfound objects blocking cluster, need help! Hi, I have a production cluster o ...
- Proftp最简匿名访问配置
前言 每一次做ftp的配置都要弄半天,找文档,各种权限控制的坑,折腾半天,这次还是准备记录下来,以备不时之需,这里不配置什么高级的功能,就去实现一个最简单的配置 匿名用户的上传和下载 配置proftp ...
- 使用iptables做端口转发
通过iptables可以做转发 #!/bin/sh IPT="/sbin/iptables" /bin/echo "1" > /proc/sys/net/ ...
- 算法:矩阵连乘(Java)动态规划
Description 给你2个矩阵A.B,我们使用标准的矩阵相乘定义C=AB如下: A数组中栏(column)的数目一定要等于B数组中列(row)的数目才可以做此2数组的相乘.若我们以rows(A) ...
- 解决-Chrome插件安装时程序包无效:"CRX_HEADER_INVALID"
最近安装新的谷歌插件出现 :程序包无效:"CRX_HEADER_INVALID" 原因如下: 在地址栏输入chrome://settings/help 如果,你的 Chrome 浏 ...
- Matlab 数值计算
本博客记录一些简单的计算 det(A):矩阵求行列式 A=[1,2;3,4]; det(A) ans=-2; inv(A):矩阵求逆 A=[1,2;3,4]; B=inv(A) B=[-2,1;1,5 ...
- 学Python,只有不到15%的同学会成功
我给大家唱首歌:<坚持的意义> 你看过了许多书籍 你看过了许多视频 你迷失在屏幕上每一道短暂的光阴 你品尝了代码的糟心 你踏过算法的荆棘 你熟记书本里每一段你最爱的公式 却说不出你爱Pyt ...
- bootstrap火速布局"企业级"页面
套娃 .container(两边有margin)/container-fluid(无) 大盒,写一个当爹就行 .row 行 .col 列 列中可再嵌套行和列 大小 把屏幕分成十二列看 .col-(xs ...
- Beta冲刺随笔——Day_Nine
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 今日事今日毕 林涛: ...