link

题意:

给你一个长为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的更多相关文章

  1. 题解-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 ...

  2. CF 1065 E. Side Transmutations

    E. Side Transmutations http://codeforces.com/contest/1065/problem/E 题意: 长度为n的字符串,字符集为A,问多少不同的字符串.两个字 ...

  3. 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 ...

  4. CodeForces 1065E. Side Transmutations 计数

    昨天不该早点走的.... 首先操作限制实际上是一个回文限制 每个$b[i] - b[i - 1]$互不干扰,不妨设这个串关于中心点对称的这么一对区间的串分别为$(S_1, S_2)$ 题目的限制相当与 ...

  5. 组合数学——cf1065E

    从两端到中间分段,然后累乘即可 #include<bits/stdc++.h> using namespace std; #define mod 998244353 #define max ...

  6. Educational Codeforces Round 52 (Rated for Div. 2)

    题目链接 A. Vasya and Chocolate 题意 已知钱,价格,赠送规则求最多获得巧克力数 思路常规算即可 代码 #include <bits/stdc++.h> #defin ...

  7. [CodeForces]Educational Round 52

    幸好我没有打这场,我VP的时候在C题就卡死了,我果然还是太菜了. A Vasya and Chocolate 题意:一个巧克力\(c\)元,买\(a\)赠\(b\),一共有\(n\)元,问能买几个巧克 ...

  8. Codeforces Edu Round 52 A-E

    A. Vasya and Chocolate 模拟题.数据会爆\(int\),要开\(long\) \(long\) #include <iostream> #include <cs ...

随机推荐

  1. Spring Boot 源码分析 数据源 + Mybatis 配置

    公司今年开始使用 Spring Boot 开发,当然使用 Spring Boot 也是大势所趋,尤其是现在微服务的趋向,当然是选择基于Spring Boot 的 Spring Cloud.(所谓的 S ...

  2. nginx配置自动跳转

    阅读更多 希望实现的效果是,用户只要访问域名,自动跳转到index.html页面 原本配置为: location / { root   /users/apple/git_local/YAE/YAE/f ...

  3. hdu 5290 Bombing plan

    http://acm.hdu.edu.cn/showproblem.php?pid=5290 题意: 一棵树,每个点有一个权值wi,选择点i即可破坏所有距离点i<=wi的点,问破坏所有点 最少需 ...

  4. springmvc常用注解标签详解-推荐

    1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...

  5. 流行的软件工程过程--Rational统一过程!

    RUP提供了一个给角色分配任务和责任的严格方法,在J2EE开发中使用RUP出于以下三个原因: RUP以架构为中心:在将资源分配给全面开发之前,它先开发一个可执行的架构原型. UP是迭代并基于构件的. ...

  6. 高品质的JavaScript

    整理书籍内容(QQ:283125476 发布者:M [重在分享,有建议请联系->QQ号]) 养成良好的编程习惯 ##如何避免团队JS冲突 * 避免实用全局变量[可使用匿名函数进行处理]以避免全局 ...

  7. GORM 中文文档

    由于篇幅问题,本文只是快速开始部分,下面是完整地址. 中文文档地址:http://gorm.book.jasperxu.com/ 中文文档项目地址:https://github.com/jasperx ...

  8. Springboot分模块开发详解(2):建立子工程

    1.创建base-entity 选中base工程,右键创建一个新的maven工程 自动选择了base这个目录存放子工程 创建后,pom.xml修改成如下内容: <?xml version=&qu ...

  9. java 内部类和向上转型

    当将内部类向上转型为其基类时,尤其是转型为一个接口的时候,内部类就有了用武之地,(从实现某个接口的对象,得到对接口的引用,与向上转型为这个对象的基类,实际上是一样的效果,),这是因为此内部类---某个 ...

  10. Angular2 CLI安装

    官方文档: https://angular.cn/docs/ts/latest/cli-quickstart.html 实现步骤: 1.设置开发环境 2.创建新项目以及应用的骨架 3.启动开启服务 4 ...