E. Side Transmutations

http://codeforces.com/contest/1065/problem/E

题意:

  长度为n的字符串,字符集为A,问多少不同的字符串。两个字符串相同:

  1. 在给定的数组b中,找到一个数b[i],设k=b[i]
  2. 将1~k,与n-k+1~n 的字符串翻转,然后交换位置。新形成的字符串与原来的字符串相等。

分析:

  考虑只有一个b[i]的影响,那么对于一个字符串,分成了三段,前面k个,后面k个,中间的。中间的部分就是$A^{n-k-k}$,再看两边形成多少种字符串,使得这些都是不同的。

  左边k个和右边k个的所有的字符串,两两组合,加上中间的部分,构成一个字符串。然后这个字符串与操作后的字符串是相等的,于是它们应该只计算一次,所以除以2就行。但是有一些字符串操作后,与原来一样,这些也不会形成等价的字符串,所以不需除以2,算一次就行了。

  左边k个的总方案数$A^{k}$,两边两两组合$A^{k+k}$。操作后与原来一样的字符串$A^{k}$,表示左边k个随便选,右边的k个为左边的倒置。那么第一部分就是$\frac{A^{k+k}-A^{k}}{2}$,再加上第二部分$A^{k}$,合并后$\frac{A^{k} \times (A^{k} + 1)}{2}$。

  然后考虑增加一个b的影响,那么中间的部分,不可以在按上一个的选了,为$A^{n-k-k}$,所以先不考虑中间的,只考虑两边的。因为b[i]下一个回事两边增加b[i+1]-b[i]个字符。那么这b[i]在按照上面的方式组合,就会有形成一些新的字符串。那么乘上这些即可,最后再乘上中间的部分。就是$A^{n-b[m]-b[m]}$

代码:

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cctype>
#include<set>
#include<vector>
#include<queue>
#include<map>
#define fi(s) freopen(s,"r",stdin);
#define fo(s) freopen(s,"w",stdout);
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
const LL mod = ; LL ksm(LL a, LL b) {
LL res = ;
while (b) {
if (b & ) res = res * a % mod;
a = a * a % mod;
b >>= ;
}
return res;
} LL b[N]; int main() {
int n = read(), m = read();
LL A = read();
for (int i=; i<=m; ++i) b[i] = read();
LL ans = , inv2 = ksm(, mod - );
for (int i=; i<=m; ++i) {
LL L = b[i] - b[i - ];
LL tmp = ksm(A, L);
ans = ans * tmp % mod * (tmp + ) % mod;
ans = ans * inv2 % mod;
}
ans = ans * ksm(A, n - b[m] - b[m]) % mod;
cout << ans;
return ;
}

CF 1065 E. Side Transmutations的更多相关文章

  1. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  2. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  3. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  4. 【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流

    http://www.lydsy.com/JudgeOnline/problem.php?id=1065 https://vijos.org/p/1826 好难的题啊TWT ∈我这辈子也想不出来系列~ ...

  5. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  6. bzoj 1065: [NOI2008] 奥运物流

    1065: [NOI2008] 奥运物流 Description 2008北京奥运会即将开幕,举国上下都在为这一盛事做好准备.为了高效率.成功地举办奥运会,对物流系统 进行规划是必不可少的.物流系统由 ...

  7. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  8. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  9. CF memsql Start[c]UP 2.0 B

    CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...

随机推荐

  1. 四级菜单实现(Python)

    menu_dict = { '山东' : { '青岛' : { '四方':{'兴隆路','平安路','杭州路'}, '黄岛':{}, '崂山':{} }, '济南' : { '历城':{}, '槐荫' ...

  2. php中session中的反序列

    1.php   键名 + 竖线 + 经过 serialize() 函数反序列处理的值2.php_binary    键名的长度对应的 ASCII 字符 + 键名 + 经过 serialize() 函数 ...

  3. Java对象声明时:new与null的区别

    作者:林子云链接:https://www.zhihu.com/question/21468505/answer/18333632来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  4. PAT——1028. 人口普查

    某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...

  5. Android攻城狮学习笔记—入门篇一

    第一章 搭建Android开发环境 1.1 环境组成 JDK(Java Development Kit) Eclipse Android SDK(Software Development Kit) A ...

  6. DPDK测试用例(sample)编译

    前言 要使用DPDK的测试用例,必须先进行编译,以此记录编译的操作,方便日后查找 编译用例 设置环境变量,将DPDK的目录路径添加到编译代码中,RTE_SDK指示DPDK目录路径: export RT ...

  7. JavaScript or jQuery 获取option value值 以及文本内容的方法

    1.html <div class="form-group"> <label>保险公司</label> <select class=&qu ...

  8. HttpWebRequest类,及如何使用Cookie(转载)

    HttpWebRequest类与HttpRequest类的区别.HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所有信息.而HttpWebReques ...

  9. (转)Linux内核基数树应用分析

    Linux内核基数树应用分析 ——lvyilong316 基数树(Radix tree)可看做是以二进制位串为关键字的trie树,是一种多叉树结构,同时又类似多层索引表,每个中间节点包含指向多个节点的 ...

  10. Oracle 12.2 设置LOCAL_TEMP_TABLESPACE

    12.2 设置LOCAL_TEMP_TABLESPACE SQL>  select username,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,LOCAL_ ...