考虑对立情况,不漂亮的串的形式必然为GGGGR……R……RGGGG

相邻R之间的距离为奇数且相等。

#include <cstdio>
#include <cstring>
#include <cstdlib> #define LL long long int using namespace std; const int MAXN = ;
const LL MOD = ; char str[MAXN]; int main()
{
int T;
scanf( "%d", &T );
while ( T-- )
{
scanf( "%s", str );
int len = strlen(str);
LL unknown = ;
LL Rnum = ;
for ( int i = ; i < len; ++i )
{
switch( str[i] )
{
case '?': ++unknown; break;
case 'R': ++Rnum; break;
default:;
}
} LL res = ;
//如果全是G
if ( Rnum == ) ++res; //枚举R的起点
for ( int i = ; i < len; ++i )
{
if ( str[i] == 'G' ) continue; //如果只有一个R
if ( str[i] == 'R' && Rnum == ) res = ( res + ) % MOD;
else if ( str[i] == '?' && Rnum == ) res = ( res + ) % MOD; //至少有两个R, 枚举间距
for ( int dis = ; i + dis < len; dis += )
{
int cnt = (str[i] == 'R'); //统计R的个数
//从第二个位置开始遍历
for ( int k = i + dis; k < len; k += dis )
{
if ( str[k] == 'G' ) break;
if ( str[k] == 'R' ) ++cnt; //记录经过的R的个数
//如果经过的R的个数等于已知的R的个数,不漂亮的串的个数+1
//从k之前是RG交替,从k之后全部是G
//printf( "dis=%d i=%d k=%d cnt=%d\n", dis, i, k, cnt );
if ( cnt == Rnum ) res = ( res + ) % MOD;
}
} if ( str[i] == 'R' ) break;
} LL all = ;
for ( int i = ; i < unknown; ++i )
all = (all * ) % MOD; //printf("%I64d %I64d\n", all, res );
printf("%I64d\n", ( all - res + MOD ) % MOD );
}
return ;
}

HDU 4346 The Beautiful Road ( 反向考虑 思路题 )的更多相关文章

  1. HDU 5832 A water problem(某水题)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  2. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  3. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  4. 51nod P1305 Pairwise Sum and Divide ——思路题

    久しぶり! 发现的一道有意思的题,想了半天都没有找到规律,结果竟然是思路题..(在大佬题解的帮助下) 原题戳>>https://www.51nod.com/onlineJudge/ques ...

  5. HDU 1284 钱币兑换问题(全然背包:入门题)

    HDU 1284 钱币兑换问题(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1284 题意: 在一个国家仅有1分,2分.3分硬币,将钱N ( ...

  6. POJ 1904 思路题

    思路: 思路题 题目诡异地给了一组可行匹配 肯定有用啊-. 就把那组可行的解 女向男连一条有向边 如果男喜欢女 男向女连一条有向边 跑一边Tarjan就行了 (这个时候 环里的都能选 "增广 ...

  7. BZOJ 3252: 攻略(思路题)

    传送门 解题思路 比较好想的一道思路题,结果有个地方没开\(long\) \(long\) \(wa\)了三次..其实就是模仿一下树链剖分,重新定义重儿子,一个点的重儿子为所有儿子中到叶节点权值最大的 ...

  8. BZOJ 1303: [CQOI2009]中位数图(思路题)

    传送门 解题思路 比较好想的思路题.首先肯定要把原序列转化一下,大于\(k\)的变成\(1\),小于\(k\)的变成\(-1\),然后求一个前缀和,还要用\(cnt[]\)记录一下前缀和每个数出现了几 ...

  9. hdu 5063(思路题-反向操作数组)

    Operation the Sequence Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

随机推荐

  1. MyBatis简单了解

    MyBatis 是什么? MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框架,它抽象了大量的 JDBC 冗余代 码,并提供了一个简单易用的 AP ...

  2. (jdbc和cmd)sqlite数据迁入mysql(导入导出)

    从sqlite进行导出数据 进行cmd命令 第一步:sqlite3->.open [文件路径](打开连接)->.tables(这个是查看表是否有没有)->.cd [切换的盘符](这里 ...

  3. CUDA三维数组

    http://hpcbbs.it168.com/forum.php?mod=viewthread&tid=1643 根据上面链接的帖子研究了下三维数组,就像他自己说的一样是有问题的,我自己修改 ...

  4. centos开启rewrite功能

    首先找到 /etc/httpd/conf/httpd.conf 文件,然后修改以下两个地方: 1.取消下面一句的注释 LoadModule rewrite_module modules/mod_rew ...

  5. python 生成器与迭代器(yield 用法)

    背景 首先,我不会解释这两个名词,我看过很多遍解释,可还是看不懂,还是直接看使用情景吧. 我们以佩波拉契数列为例,当我们不知道迭代器的情况下,我们写出来的代码可能是这样子的: '''这种方式计算fib ...

  6. Linux 中将用户添加到指定组的指令

    将一个已有用户 testuser 增加到一个已有用户组 root 中,使此用户组成为该用户的附加用户组,可以使用带 -a 参数的 usermod  指令.-a 代表 append, 也就是将用户添加到 ...

  7. lintcode_69_二叉树的层次遍历

    二叉树的层次遍历   描述 笔记 数据 评测 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的这个题? LinkedIn Airb ...

  8. keil 使用C++编程主要要点

    1.中断处理,添加一下宏定义.如果不添加,中断服务函数不会链接到下载文件中:发生中断后,会停留在xxx.s文件的 "B ."语句. #ifdef __cplusplus exter ...

  9. 20145202马超GDB调试汇编堆栈过程分析

    20145202马超GDB调试汇编堆栈过程分析 esc :w保存,:wq保存并退出 x:删除错误的单个字母 dw:删除整个单词 gcc hello.c -o hello:运行hello.c gcc - ...

  10. Web安全2--XSS&CSRF

    1.XSS(跨站脚本攻击) 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS ...