题目名称 2793. [Codeforces 794G] 文本替换
输入输出 replaceall.in/out
难度等级 ★★★
时间限制 2000 ms (2 s)
内存限制 256 MiB
测试数据 20
题目来源 Gravatarcstdio 于2017-09-05加入
开放分组 全部用户
提交状态
分类标签
Codeforces 数论
分享题解
通过:1, 提交:1, 通过率:100%
Gravatarcstdio 100 9.104 s 14.62 MiB C++
关于 文本替换 的近10条评论(全部评论)
坑点:打阶乘表算组合数,这个表应该开多大……
Gravatarcstdio
2017-09-05 16:37 1楼

2793. [Codeforces 794G] 文本替换

★★★   输入文件:replaceall.in   输出文件:replaceall.out   简单对比
时间限制:2 s   内存限制:256 MiB

【题目描述】


分析师Igor正在研究文本编辑器的“文本替换”功能。他闲得无聊,想出了以下问题:

给定两个仅含大写字母'A'和'B'的英文字符串。称一对字符串(s,t)是“好”的,当且仅当:

1. s和t仅包含'0'和'1'

2. 1<=|s|,|t|<=n,其中|s|是s的长度

3. 如果把x和y中的所有'A'替换成s,所有'B'替换成t,那么x和y会变得一样。

例如,如果x=AAB,y=BB,n=4,那么(01,0101)是一组好字符串,因为替换后x和y都变成了“01010101”.

称一对字符串(x,y)的“自由度”是相应好字符串对(s,t)的数量。这里都是有序对,例如(0,1)和(1,0)不同。

给定两个字符串c和d,它们由'A','B','?'组成。'?'可以表示'A'或'B',问所有情况下的自由度之和。



【输入格式】


前两行各一个字符串c,d(1<=长度<=3*10^5)

第三行一个正整数N,满足1<=N<=3*10^5.


【输出格式】

一个整数,答案模10^9+7的值。

【样例输入】

A?

?

3

【样例输出】

2

【样例输入】


A

B

10



【样例输出】

2046

【提示】


对于第一个样例,有四对可能的 (c', d').

若 (c', d') = (AA, A), 自由度为  0.

若 (c', d') = (AB, A), 自由度为 0.

若 (c', d') = (AA, B), 自由度为 2, 两种方案是 (1, 11), (0, 00) .

若 (c', d') = (AB, B), 自由度为 0.

所以总自由度为2.

对于第二个样例,长度不超过10的01串共有2^1+...+2^10=2046个,而所有好字符串对形如(s,s),其中s是长度不超过10的01串。


【来源】

CODEFORCES ROUND #414

http://codeforces.com/contest/794/problem/G