CF1065E Side Transmutations
题意:
给你一个长为m的序列$b_i$,定义两个字符串a,b相同当前仅当a执行以下操作后能变成b:($\rm{prefix}(x,y)$及$\rm{suffix}(x,y)$定义为串x的前/后y位组成的串)
- 选择一个$k=b_i$;
- 将$s1=\rm{prefix}(a,k)$和$s2=\rm{suffix}(a,k)$取出;
- 将s2翻转后接到头部,s1翻转后接到头部;
- 退出或重复上述操作。
求长为n,字符集大小为x的不相同串个数。
$m\leq2\times10^5,n,x\leq10^9.$
题解:
不太懂题解那个神奇的组合做法。。问到一种polya推法,重新复习了一遍polya定理。
polya定理:在一个置换群F中用t种颜色染色,第i个置换有$k_i$个循环,本质不同的染色数为
$$\begin{equation}\frac{\sum_{i=0}^{|F|}t^{k_i}}{|F|}\end{equation}$$
那么这题里的翻转就是F,可以看做是一些交换操作,如选择$k=b_1$就是交换$(1,n)(2,n-1)...(b_1,n-b_1+1)$这些数对。不难发现一个置换交换了x对数对,就有n-x个循环。
我们可以对b做差分记为c,这样每一个$c_i$对应的是一些互不相交的交换操作,同时通过$2^m$种组合可以组合出任意一种对应原序列b的方案,也就是c和b是等价的。
记$cnt_i$为$n-c_i$也就是$c_i$对应置换的循环个数,由于互不相交,任意一些$c_i$组合后的循环个数可以直接相加。所以最终答案的式子应该是:
$$\begin{equation}\frac{1}{|F|}\sum_{s\subseteq c}x^{n-\sum s}\end{equation}$$
提出$x^n$,此题有$|F|=2^m$。那个枚举c的子集求$x^{\sum s}$部分,用生成函数的思想转化,写成$\prod_{s\in c} (1+x^s)$即可。这样就可以直接算了。
由于指数上有$n-\sum s$,相当于要除法,其实可以提一个$x^{\sum c}$出来,那么后面的指数就变正了。
复杂度一个log。
code:
#include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define ll long long
using namespace std;
const int N=2e5+,mod=,inv2=(mod+)/;
int n,m,x,a[N],ans;
int ksm(int x,int y){
int s=;
for (;y;y>>=,x=(ll)x*x%mod) if (y&) s=(ll)s*x%mod;
return s;
}
int main(){
scanf("%d%d%d",&n,&m,&x);
rep (i,,m) scanf("%d",&a[i]);
ans=ksm(x,n-a[m]);
for (int i=m;i;i--) a[i]-=a[i-],ans=(ll)ans*inv2%mod;
rep (i,,m) ans=(ll)ans*(+ksm(x,a[i]))%mod;
printf("%d\n",ans);
return ;
}
CF1065E Side Transmutations的更多相关文章
- 题解-CF1065E Side Transmutations
CF1065E Side Transmutations \(n\) 和 \(m\) 和 \(k\) 和序列 \(b_i(1\le i\le m,1\le b_i\le b_{i+1}\le \frac ...
- CF 1065 E. Side Transmutations
E. Side Transmutations http://codeforces.com/contest/1065/problem/E 题意: 长度为n的字符串,字符集为A,问多少不同的字符串.两个字 ...
- Educational Codeforces Round 52 (Rated for Div. 2) E. Side Transmutations
http://codeforces.com/contest/1065/problem/E 数学推导题 #include <bits/stdc++.h> using namespace st ...
- CodeForces 1065E. Side Transmutations 计数
昨天不该早点走的.... 首先操作限制实际上是一个回文限制 每个$b[i] - b[i - 1]$互不干扰,不妨设这个串关于中心点对称的这么一对区间的串分别为$(S_1, S_2)$ 题目的限制相当与 ...
- 组合数学——cf1065E
从两端到中间分段,然后累乘即可 #include<bits/stdc++.h> using namespace std; #define mod 998244353 #define max ...
- Educational Codeforces Round 52 (Rated for Div. 2)
题目链接 A. Vasya and Chocolate 题意 已知钱,价格,赠送规则求最多获得巧克力数 思路常规算即可 代码 #include <bits/stdc++.h> #defin ...
- [CodeForces]Educational Round 52
幸好我没有打这场,我VP的时候在C题就卡死了,我果然还是太菜了. A Vasya and Chocolate 题意:一个巧克力\(c\)元,买\(a\)赠\(b\),一共有\(n\)元,问能买几个巧克 ...
- Codeforces Edu Round 52 A-E
A. Vasya and Chocolate 模拟题.数据会爆\(int\),要开\(long\) \(long\) #include <iostream> #include <cs ...
随机推荐
- vue中的this指向问题
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- jQuery 实现 bootstrap 模态框 删除确认
思路: 点击删除按钮,通过jquery将删除操作的URL赋值到页面URL元素,并弹出会话框 用户点击确认,通过jquery获取URL,并发送删除请求至后台. 一.删除button <a clas ...
- 转 -----那些年总也记不牢的IO
关于资源关闭: 一般情况下是:先打开的后关闭,后打开的先关闭 另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b 例如处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b 当然完 ...
- ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等)
以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping) 在ASP.NET中,有很多种保存信息的对象.例 ...
- CSS-3 RGBA的使用
由于IE-8及以下都不支持 RGBA(),所以往往大家都不用这个属性,而是用图层叠加的方式去实现我们想要的效果.因为 opacity 这个属性是会影响到子孙元素的. 例如: <div class ...
- 广度优先搜索(BFS)----------------(TjuOj1140_Dungeon Master)
这次整理了一下广度优先搜索的框架,以后可以拿来直接用了.TjuOj1140是一个三维的迷宫题,在BFS时我增加了一个控制数组,用来对队列的出队进行控制,确保每次出队的结点均为同一步长的结点,个人认为比 ...
- Js表单验证控件
演示地址:http://weishakeji.net/Utility/Verify/Index.htm 开源地址:https://github.com/weishakeji/Verify_Js ...
- Java基本数据类型装箱的127临界点
package wrapper.demo; public class WrapperDemo { /** * @param args */ public static void main(String ...
- order by 字段自动填写脚本
新版 firefox 中的 hackbar 没有 order by 字段填写, 所以就有了这个: =begin pod sql注入中自动输出order by 的位数 =end pod sub MAIN ...
- python3之模块psutil系统性能信息
psutil是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,包括CPU.内存.磁盘.网络等信息. 它主要应用于信息监控,分析和限制系统资源及进程的管理.它实现了同等命令命令行工具提供的功能, ...