HDU 4346 The Beautiful Road ( 反向考虑 思路题 )
考虑对立情况,不漂亮的串的形式必然为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 ( 反向考虑 思路题 )的更多相关文章
- HDU 5832 A water problem(某水题)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 51nod P1305 Pairwise Sum and Divide ——思路题
久しぶり! 发现的一道有意思的题,想了半天都没有找到规律,结果竟然是思路题..(在大佬题解的帮助下) 原题戳>>https://www.51nod.com/onlineJudge/ques ...
- HDU 1284 钱币兑换问题(全然背包:入门题)
HDU 1284 钱币兑换问题(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1284 题意: 在一个国家仅有1分,2分.3分硬币,将钱N ( ...
- POJ 1904 思路题
思路: 思路题 题目诡异地给了一组可行匹配 肯定有用啊-. 就把那组可行的解 女向男连一条有向边 如果男喜欢女 男向女连一条有向边 跑一边Tarjan就行了 (这个时候 环里的都能选 "增广 ...
- BZOJ 3252: 攻略(思路题)
传送门 解题思路 比较好想的一道思路题,结果有个地方没开\(long\) \(long\) \(wa\)了三次..其实就是模仿一下树链剖分,重新定义重儿子,一个点的重儿子为所有儿子中到叶节点权值最大的 ...
- BZOJ 1303: [CQOI2009]中位数图(思路题)
传送门 解题思路 比较好想的思路题.首先肯定要把原序列转化一下,大于\(k\)的变成\(1\),小于\(k\)的变成\(-1\),然后求一个前缀和,还要用\(cnt[]\)记录一下前缀和每个数出现了几 ...
- hdu 5063(思路题-反向操作数组)
Operation the Sequence Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
随机推荐
- Thread 创建线程
1.该线程变量 无参数 我们可以把线程的变量 理解为一个 委托.可以指向一个方法.有点像c语言中的指向函数的指针. 第1步我们创建了 Thread变量t1 ,第2步创建了一个方法threadChild ...
- Intel MKL 多线程设置
对于多核程序,多线程对于程序的性能至关重要. 下面,我们将对Intel MKL 有关多线程方面的设置做一些介绍: 我们提到MKL 支持多线程,它包括的两个概念:1>MKL 是线程安全的: MKL ...
- redis事务中的WATCH命令和基于CAS的乐观锁
转自:http://blog.sina.com.cn/s/blog_ae8441630101cgy3.html 在Redis的事务中,WATCH命令可用于提供CAS(check-and-set)功能. ...
- C# do while语句
一.C# do while语句 do while语句是先执行一次循环体,然后再判断是否需要重复执行循环体的循环控制语句. 语法格式如下: do{ embedded-statement}while ...
- C#获取包括一二级汉字的拼音 首字母
C#获取包括一二级汉字的拼音 首字母 声母 汉字拼音转换 using System; using System.Collections.Generic; using System.Linq; usin ...
- C#后台动态添加Grid表格
前面页面: <ScrollViewer x:Name=" BorderBrush="#25A0DA" VerticalScrollBarVisibility=&qu ...
- 用struct LNode *L与LinkList &L的区别
用void InitList(struct LNode *L), 函数InitList中如果改变了L指针本身的值,对其他函数无影响.用void InitList(LinkList &L),函数 ...
- JS - 简单的下载图片至本地
<iframe id="saveImg" src="图片路径" style="display:none;"></ifram ...
- PHP实现qq三方登录
除了qq第三方登录外.还有微博,微信等第三方登录 qq第三方登录,遵循oauth2.0协议 这里是说明http://www.cnblogs.com/yx520zhao/p/6616686.html q ...
- Delphi中DLL的创建和使用(转)
Delphi中DLL的创建和使用 1.DLL简介: 2.调用DLL: 3.创建DLL: 4.两个技巧: 5.初始化: 6.例外处理. 1.DLL简介 ...