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}\overrightarrow{B}\overrightarrow{C}=\overleftarrow{C}\overrightarrow{B}\overleftarrow{A}
\]

如果 \(\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}\overrightarrow{B}\overrightarrow{C}\overrightarrow{D}\overrightarrow{E}=\overleftarrow{E}\overrightarrow{B}\overrightarrow{C}\overrightarrow{D}\overleftarrow{A}=\overrightarrow{A}\overleftarrow{D}\overrightarrow{C}\overleftarrow{B}\overrightarrow{E}=\overleftarrow{E}\overleftarrow{D}\overrightarrow{C}\overleftarrow{B}\overleftarrow{A}
\]

如果 \(\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}\}\)。

\[Ans=2^{-m}\sum_{sub\in st}k^{n-\sum_{x\in sub}x}
\]

看似诡异,但是其实这个一把这个式子裂开就发现是可以合并的:

\[\begin{split}
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}
\]
\[\therefore Ans=2^{-m}k^{n-b_m}(k^{st_1}+1)(k^{st_2}+1)\cdots(k^{st_m}+1)
\]

然后就做完了。因为还要 \(\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的更多相关文章

  1. CF1065E Side Transmutations

    link 题意: 给你一个长为m的序列$b_i$,定义两个字符串a,b相同当前仅当a执行以下操作后能变成b:($\rm{prefix}(x,y)$及$\rm{suffix}(x,y)$定义为串x的前/ ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. 进程 PCB 进程挂起

    7-1 进程定义  OS系统从只能跑一个程序到能跑多个.进程可以描述程序的执行过程. 进程:一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程. 只有当一个程序被OS加载到内存中,cpu对其 ...

  2. linux定时任务(crontab和at)

    查看定时任务:crontab -l [root@localhost test]# crontab -l no crontab for root 创建编辑定时任务:crontab -e [root@lo ...

  3. 在Service中创建全局Dialog对话框

    需要使用到悬浮窗权限 val builder: AlertDialog.Builder = AlertDialog.Builder(this)builder.setMessage("from ...

  4. MFC的消息响应机制说明

    MFC的快速理解: 1.MFC的设计者们在设计MFC时,有一个主要的方向就是尽可能使得MFC的代码要小,速度尽可能快.为了这个方向,工程师们使用了许多技巧,主要表现在宏的运用上,实 现MFC的消息映射 ...

  5. Python_面试题汇总【正在整理中...】

    1.十大算法 阶乘 冒泡 1 #使用递归实现阶乘 2 3 def f(n): 4 if n ==1: 5 return 1 6 else: 7 return n*(f(n-1)) 使用递归实现阶乘 1 ...

  6. Weblogic CVE-2020-2551漏洞复现&CS实战利用

    Weblogic CVE-2020-2551漏洞复现 Weblogic IIOP 反序列化 漏洞原理 https://www.anquanke.com/post/id/199227#h3-7 http ...

  7. 建议收藏!超详细的JVM反射原理技术点总结

    反射定义 1,JAVA反射机制是在运行状态中 对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称 ...

  8. 阿里面试官:小伙子,你给我说一下Spring Bean初始化的几种常规方式吧

    前言 通过构造方法实例化通过静态工厂实例化通过实例工厂实例化通过FactoryBean实例化 RumenzA实体类 package com.rumenz; public class RumenzA { ...

  9. 轻松将CAD文件转为加密的PDF文件

    对于从事设计相关工作的朋友来说,CAD肯定再熟悉不过了.一些有特殊要求的CAD文件,需要将其转换成为PDF文件以方便保存.传输.打印,同时还得保证设计图稿的安全性,所以将CAD文件直接转为加密的PDF ...

  10. FL Studio采样器设置的功能是什么

    FL Studio是一款很集成化的软件,它和很多其他的软件不同,FL Studio的通道中集成了很多采样器.这种整合的方式不但功能强大而且也很便捷.今天小编就来为大家详细的简介下FL Studio采样 ...