Codeforces 805D/804B - Minimum number of steps
传送门:http://codeforces.com/contest/805/problem/D
对于一个由‘a’、‘b’组成的字符串,有如下操作:将字符串中的一个子串“ab”替换成“bba”。当字符串中不含有子串“ab”时,任务完成。求完成任务的最小操作次数(mod109+7)。
最终,字符串的形式为:
bbb...baaa...a
可以考虑寻找规律:
a.
i)“ab”→“bba”,
ii)“aab”→“abba”→“bbaba”→“bbbbaa”,
iii)“aaab”→“aabba”→“abbaba”→“bbababa”→“bbbbaaba”→“bbbbabbaa”→“bbbbbbabaa”→“bbbbbbbbaaa”;
b.
i)“ab”→“bba”,
ii)“abb”→“bbab”→“bbbba”,
iii)“abbb”→“bbabb”→“bbbbab”→“bbbbbba”。
可见,$"\underbrace{a\cdots a}_{n}b"$型字符串的操作次数为2n-1,$"a\underbrace{b\cdots b}_{m}"$型字符串的操作次数为m。下证之:
a.(证:$"a\underbrace{b\cdots b}_{m}"$型字符串的操作次数为m)
i)当m=1时,“ab”→“bba”,操作次数为1;
ii)假设当m=k时,$"a\underbrace{b\cdots b}_{k}"$→$"\underbrace{b\cdots b}_{2k}a"$,操作次数为k,则当m=k+1时:
由$"a\underbrace{b\cdots b}_{2k+1}b"$→$"\underbrace{b\cdots b}_{2k}ab"$的操作次数为k,由$"\underbrace{b\cdots b}_{2k}ab"$→$"\underbrace{b\cdots b}_{2k}bba"$的操作次数为1。故由$"a\underbrace{b\cdots b}_{2k+1}"$→$"\underbrace{b\cdots b}_{2k+2}a"$的操作次数为k+1。
b.(证:$"\underbrace{a\cdots a}_{n}b"$型字符串的操作次数为2n-1)
i)当n=1时,“ab”→“bba”,操作次数为1;
ii)假设当n=k时,$"\underbrace{a\cdots a}_{k}b"$→$"\underbrace{b\cdots b}_{2^{k}}\underbrace{a\cdots a}_{k}"$,操作次数为2k-1,则当n=k+1时:
由$"a\underbrace{a\cdots a}_{k}b"$→$"a\underbrace{b\cdots b}_{2^{k}}\underbrace{a\cdots a}_{k}"$的操作次数为2k-1,由$"a\underbrace{b\cdots b}_{2^{k}}\underbrace{a\cdots a}_{k}"$→$"\underbrace{b\cdots b}_{2^{k}}\underbrace{b\cdots b}_{2^{k}}a\underbrace{a\cdots a}_{n}"$的操作次数为2k。故由$"\underbrace{a\cdots a}_{k+1}b"$→$"\underbrace{b\cdots b}_{2^{k+1}}\underbrace{a\cdots a}_{k+1}"$的操作次数为2k-1+2k=2k+1-1。
考虑一般的情形:
设字符串的长度为len,其中,字符‘b’占据位置p1,p2,...,pn。这个字符串对应的操作次数为:$\sum_{i=1}^{n}(2^{p_{i}-i}-1)$。
若1..pi的字符‘a’个数为cnti,则cnti=pi-i。这个字符串对应的操作次数为:$\sum_{i=1}^{n}(2^{cnt_{i}}-1)$。
下证之:
(A为只含有字符‘a’的字符串,B为只含有字符‘b’的字符串;A、B可为空。)
i)当n=1时,$"\underbrace{a\cdots a}_{cnt_{1}}\underset{1}{b}"$→"BA",操作次数为$2^{cnt_{1}}-1$;
ii)假设当n=k时,$"A\underset{1}{b}\cdots A\underset{k}{b}\cdots"$→"BA"的操作次数为$\sum_{i=1}^{k}(2^{cnt_{i}}-1)$,则当n=k+1时:
由$"A\underset{1}{b}\cdots A\underset{k}{b}A\underset{k+1}{b}\cdots"$→$"BA*\underset{k+1}{b}\cdots"$的操作次数为$\sum_{i=1}^{k}(2^{cnt_{i}}-1)$,A*的长度为cntk+1,则由$"BA*\underset{k+1}{b}\cdots"$→"BA"的操作次数为$2^{cnt_{k+1}}-1$。故由$"A\underset{1}{b}\cdots A\underset{k}{b}A\underset{k+1}{b}\cdots"$→"BA"的操作次数为$\sum_{i=1}^{k+1}(2^{cnt_{i}}-1)$。
参考程序如下:
#include <stdio.h>
#define MOD 1000000007 int pwr(long long x, int p)
{
if (p == ) return ;
if (p & ) return x * pwr(x, p - ) % MOD;
return pwr(x * x % MOD, p >> ) % MOD;
} int main(void)
{
char ch;
int cnt = , ans = ;
while ((ch = getchar()) != '\n') {
if (ch == 'a') cnt++;
else {
ans += pwr(, cnt) - ;
ans %= MOD;
}
}
printf("%d\n", ans);
}
Codeforces 805D/804B - Minimum number of steps的更多相关文章
- 【codeforces 805D】Minimum number of steps
[题目链接]:http://codeforces.com/contest/805/problem/D [题意] 给你一个字符串; 里面只包括a和b; 让你把里面的"ab"子串全都去 ...
- codeforce 804B Minimum number of steps
cf劲啊 原题: We have a string of letters 'a' and 'b'. We want to perform some operations on it. On each ...
- codeforces 805 D. Minimum number of steps(数学)
题目链接:http://codeforces.com/contest/805/problem/D 题意:只有一个操作就是将ab变成bba直到不能变为止,问最少边几次. 题解:这题可以多列几组来找规律, ...
- Codeforces 805 D Minimum number of steps
题意: 给定一串字符串,将所有“ab”的子串替换为“bba”,询问多少次操作后没有子串“ab”. 分析: 观察可得,将“ab”替换为“bba”有两种结果. ①a移到了b的后面 ②增加了一个b 而且最终 ...
- Codeforces 805D - Minimum number of steps
805D - Minimum number of steps 思路:简单模拟,a每穿过后面一个b,b的个数+1,当这个a穿到最后,相当于把它后面的b的个数翻倍.每个a到达最后的步数相当于这个a与它后面 ...
- Minimum number of steps CodeForces - 805D(签到题)
D. Minimum number of steps time limit per test 1 second memory limit per test 256 megabytes input st ...
- Minimum number of steps 805D
http://codeforces.com/contest/805/problem/D D. Minimum number of steps time limit per test 1 second ...
- Codeforces Round #411 div 2 D. Minimum number of steps
D. Minimum number of steps time limit per test 1 second memory limit per test 256 megabytes input st ...
- Codeforces805D. Minimum number of steps 2017-05-05 08:46 240人阅读 评论(0) 收藏
D. Minimum number of steps time limit per test 1 second memory limit per test 256 megabytes input st ...
随机推荐
- Unique Paths I,II
题目来自于:https://leetcode.com/problems/unique-paths/ :https://leetcode.com/problems/unique-paths-ii/ A ...
- Sublime text 神器小记
曾经一直使用的都是Editplus,一直感觉都是非常不错的. 可是近期接触到sublime text,我就fall in love with it. Sublime 的意思是"顶峰,高尚,非 ...
- 2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理
这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著 机械工业出版社2013年5月出 ...
- C# textbox中输入时加限制条件 // C#Winform下限制TextBox只能输入数字 // 才疏学浅(TextBox 小数点不能在首位+只能输入数字)
textbox中输入时加限制条件 分类: C# winform2008-08-26 08:30 306人阅读 评论(0) 收藏 举报 textbox正则表达式object 1.用正则表达式! 2.使用 ...
- P2932 [USACO09JAN]地震造成的破坏Earthquake Damage 爆搜
这题怎么这么水~~~本来以为挺难的一道题,结果随便一写就过了...本来还不知道损坏的牛棚算不算,结果不明不白就过了... 题干: 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有 ...
- SpringMVC中url映射到Controller
SpringMVC也是一种基于请求驱动的WEB框架,并且使用了前端控制器的设计模式.前端控制器就是DispatcherServlet控制器,只要满足web.xml文件中的[url-pattern]的规 ...
- Constructing Roads(spfa)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2493 #include <stdio.h ...
- APPStore 发布流程及证书申请
最新的 iOS 申请证书与发布流程(2016.7) 今天刚好客户定制的APP需要上架,也提供了新的开发者账号,所以就顺带把申请证书与发布流程写一遍. 证书是什么? 上面这个就是我们申请好证书后,下载到 ...
- C#比较两个日期的大小 .net
using System;using System.Collections; public class MyClass{public static void Main(){DateTime dt1 = ...
- Redis学习笔记(三)-数据类型之string类型
string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象.从内部实现来看其实string可以看作byte ...