题解-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或 ...
随机推荐
- 开发工具之Git(一)
目录 一.什么是Git 二.Git基本原理 三.Git用户交互 一.什么是Git 答:Git是一个分布式版本控制软件.另外提一句,它的开发者就是大名鼎鼎的Linux之父Linus. 版本控制,顾名思义 ...
- java多线程---张孝祥
1.java web 中,一次http请求是一个任务,因为服务器里面有线程池的,存在一个线程处理多个请求任务. 2.在java中,vector,hashtable,concurrentHashMap是 ...
- [代码审计Day2] filter_var函数缺陷代码审计
简介 // composer require "twig/twig" require 'vendor/autoload.php'; class Template { private ...
- 原生sql查询返回结果集处理方法
今天博主用原生写查询的时候发现,查询出来的居然不是我数据表里的数据,而是一个对象 object(mysqli_result)#2 (5) { ["current_field"]=& ...
- 网站滑到指定的位置给div添加动画效果
<!DOCTYPE html> <html> <head> <style> .anim-show { width:100px; height:100px ...
- Python:安装Bio库不成功,出现ModuleNotFoundError: No module named 'Bio'
Bio库的安装并不是pip install bio,而是biopython. ./anaconda3/bin/pip3 install biopython -i https://pypi.douban ...
- vue中实时监听移动端屏幕高度(采坑后实践)
最近做微信公众号活动,需要首页往input中输入内容,点击input软键盘tabbar被顶起来,网上借鉴很多(踩了许多坑)最后自己实践出来. <--!将手机屏幕的默认高度和实时高度获取--> ...
- 聊聊 elasticsearch 之分词器配置 (IK+pinyin)
系统:windows 10 elasticsearch版本:5.6.9 es分词的选择 使用es是考虑服务的性能调优,通过读写分离的方式降低频繁访问数据库的压力,至于分词的选择考虑主要是根据目前比较流 ...
- 容器中实现拉取其它服务器的jar包程序
缘由:在做接口自动化测试时,若业务场景有一个前置仓库,在该仓库内完成一系列的场景测试,一旦某一场景测试失败,脏数据对环境造成影响则需要清理: 1.我容器的内核系统为Debian GNU/Linux 1 ...
- KNN 算法-理论篇-如何给电影进行分类
公号:码农充电站pro 主页:https://codeshellme.github.io KNN 算法的全称是K-Nearest Neighbor,中文为K 近邻算法,它是基于距离的一种算法,简单有效 ...