E. Side Transmutations

题意:

给一个字符集A,考虑所有长度为n的字符串S,里面所有的字符都来自于字符集A,再给出m个参数b[1]~b[m],定义一种改变字符串S的操作为按顺序执行如下内容:

  1. 从b[]里选一个当k
  2. 把S的前k个字符和后k个字符分别倒置,然后交换位置

定义两个字符串等价,当且仅当一个字符串能经过若干次上述操作后变成另一个字符串

统计有多少个本质不同的字符串,答案模998244353

思路:

考虑进行5次上述操作的操作序列为{b[1], b[4], b[5], b[6], b[4]},可以手推发现它和操作序列{b[1], b[5], b[6]} 等价,也就是说操作序列中如果同一个bi出现两次,那么这两次操作可以抵消,除此之外还会发现操作与顺序无关

那么根据Bunside引理

可以得出|G| = 2^m,也就是b[]的所有不同集合都是一个置换

然后上面公式求就可以了,可以依次算出每个b[i]对不动点的个数的贡献,具体见代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<string>
#include<math.h>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
#define LL long long
#define mod 998244353
LL b[200005];
LL Pow(LL a, LL b)
{LL ans = 1;while(b){if(b%2)ans = ans*a%mod;a = a*a%mod;b /= 2;}return ans;
}
int main(void)
{int k, i;LL n, m, ans;scanf("%lld%d%lld", &n, &k, &m);for(i=1;i<=k;i++)scanf("%lld", &b[i]);ans = 1;for(i=1;i<=k;i++)ans = ans*(Pow(m, b[i]-b[i-1])+Pow(m, 2*(b[i]-b[i-1])))%mod;ans = ans*Pow(m, n-b[k]*2)%mod;ans = ans*Pow(Pow(2, k), mod-2)%mod;printf("%lld\n", ans);return 0;
}

Educational Codeforces Round 52: E. Side Transmutations(burnside引理)相关推荐

  1. Educational Codeforces Round 52: D. Three Pieces(记忆化搜索)

    D. Three Pieces 题意: 给你一n*n的矩阵,每个格子都有一个数字且所有数字构成一个1~n²的全排列,一开始你的棋子在编号为1的点上,之后你要依次到达编号为2的点.编号为3的点-- 编号 ...

  2. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  3. Educational Codeforces Round 24 E. Card Game Again(双指针)

    题目链接:Educational Codeforces Round 24 E. Card Game Again 题意: 给你n个数和一个数k. 现在每次可以拿掉前x个数,后y个数,剩下的数的乘积要能被 ...

  4. Educational Codeforces Round 113 (Rated for Div. 2) ABCD 解题思路

    Educational Codeforces Round 113 (Rated for Div. 2) 经典卡CCC秒DDD,可惜了 怪自己特判写错了吧,对式子找了半天问题结果根本不是式子的问题 A ...

  5. Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces-题解

    目录 Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces Problem Description Input Outp ...

  6. [Educational Codeforces Round 16]A. King Moves

    [Educational Codeforces Round 16]A. King Moves 试题描述 The only king stands on the standard chess board ...

  7. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  8. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  9. Educational Codeforces Round 32

    http://codeforces.com/contest/888 A Local Extrema[水] [题意]:计算极值点个数 [分析]:除了第一个最后一个外,遇到极值点ans++,包括极大和极小 ...

最新文章

  1. 思科三层交换配置清单与案例
  2. 弱电工程数据中心计算机房内布线
  3. 正则验证多个邮箱用分号隔开
  4. EntityFramework 动态构造排序 FuncIQueryableT, IOrderedQueryableT Dynamic
  5. android 开源_Android开源如何使其成为移动市场的领导者
  6. servlet请求的执行过程_Springmvc执行流程
  7. pandas读取xlsx文件,编码问题
  8. Linux系统中DHCP的配置
  9. 性能测试指标(重要)
  10. 你并不在意的 HTTPS 证书吊销机制,或许会给你造成灾难性安全问题!
  11. switch怎么一个账号绑定各种服务器,NS怎么一个账号两台机器使用_Nintendo Switch 新旧机器同使用教程_尼萌手游网...
  12. 计算机系统盘怎么扩充,c盘扩大,教您怎么把c盘扩大
  13. javascript之键盘事件
  14. 经典俄罗斯方块游戏手机版
  15. 马克思在《数学手稿》中提出如下问题:有30个人(包括男人、女人和小孩)在一家饭店吃饭共花50先令,其中每个男人花3先令,每个女人花2先令,每个小孩花1先令,问男人、女人、小孩各有多少人
  16. Wait for me和waitting for me有什么区别?
  17. 万字总结,行业分析到底应该怎么做!
  18. vivado使用方法(初级)
  19. 交换机、路由器设备选型总结
  20. C#获取同花顺,问财V(hexin-v)值

热门文章

  1. python骗局-python 无良培训忽悠骗局知多少?
  2. python骗局-老码农冒死揭开真相:quot;别吹了,Python无用!”
  3. python零基础能学吗-python 零基础该怎么学?
  4. python工资高还是java-python为什么叫爬虫 python工资高还是java的高
  5. python能做什么项目-Python可以做大项目吗?
  6. 没有基础的人可以学python吗-无基础可以学习Python吗?
  7. 语音识别中的CTC算法的基本原理解释
  8. Kaldi语音识别库linux环境下的安装和编译
  9. c语言如果x小于,请达人帮忙做份C语言试卷,谢谢了
  10. 【离散数学笔记】计数原理:解决计数问题的基本方法