The Alphabet Sticker
题目大意:给你一串字符串,其中有一部分未知,用’?’表示。
现在定义一种合法的Sticker,比如”aabcc”,“ccccab”。即所有相同的字母要在一起才是合法的。现在请问对于给定的字符串,有多少种合法的结果。
比如:”aa??bb”合法的字符串有三种。
分别是“aaaabb” “aaabbb” ”aabbbb”.
‘?’表示的字符只能从已经给出的字符中选,所以”aaccbb”是不合法的。
由于最终结果很大,所以把结果对 1e9+7取模。
题目看懂之后思路就很明确了,一个组合问题。
分析一下:
1、相同字母需要在一起
2、只能从存在的字母中选。
显然的,‘?’只能从左边或者右边的字母中选取。
‘?’出现的情况有一下几种(打引号好累):???xx xxx?? xx??xx xx?yy
第一种和第二种是一样的,因为出现在序列首/尾部。这两种情况只有1种。
第三种:只有一种,必须和x一样。
第四种:这个情况比较多,但是很容易感觉到会与‘?’的个数有关,来找下规律
aaa?bbb 长度 1 种数 2 aaaabbb aaabbbb
aaa??bbb 长度 2 种数 3 aaaaabbb aaaabbbb aaabbbbb
aaa???bbb 长度 3 种数 4 aaaaaabbb aaaaabbbb aaaabbbbb aaabbbbbb
规律很快就的出来了,种数 = 长度 + 1。
好了,所有‘?’出现的情况都分析过了,下面利用组合数学的知识,对于每一部分‘?’的种数应该乘起来求组合数。只需要在乘的过程中记得对mod取余,防止溢出就好了~
等下,是不是还忘记了一种情况。
我们默认认为数据都是合法的字符串,但是如果给你的就是一个不合法的字符串,那么这时候就应该输出0。
下面附上代码:
/*
* Problem: A
* Date: 2014-7-20
* Author: Wuhen
*/
#include <map>
#include <list>
#include <queue>
#include <string>
#include <vector>
#include <cstdarg>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define LL long long
#define Clean(a) memset(a, 0, sizeof(a)) using namespace std;
bool vis[300];
const LL mod = 1e9+7;
LL deal(LL len, char l, char r)
{
if (l == r) return 1;
else return (len+1)%mod;
} int main()
{
LL T;
cin >> T;
while(T--)
{
string s;
cin >> s;
Clean(vis);
LL all = 0;
for (LL i = 0; i < s.size(); i++)
{
if (s[i] == '?') continue;
if (vis[s[i]] == 0)
{
all += 1;
vis[s[i]] = 1;
}
else
{
LL find = i-1;
while(s[find] == '?' && find >= 0) find--;
if (s[find] != s[i])
{
all = 0;
break;
}
}
}
if (all == 0)
{
puts("0");
continue;
}
LL res = 1;
LL start = 0, stop = s.size() - 1;
while(s[start] == '?' && start < s.size()) start++;
while(s[stop] == '?' && stop >= 0) stop--;
for (LL i = start; i <= stop; i++)
{
if (s[i] != '?') continue;
char left = s[i-1];
LL len = 0;
while(s[i] == '?' && i <= stop)
{
len++;
i++;
}
res *= deal(len, left, s[i]);
res %= mod;
}
cout << res%mod << endl;
}
return 0;
}
The Alphabet Sticker的更多相关文章
- 字符串-Alphabet
在一些应用当中,会对字符串的字母表进行限制,在这些应用中,往往会用到如下的示例所涉及到的几点知识: public static void main(String[] args){ String[] a ...
- Sticker.js – 帮助你在网站中加入贴纸效果
Sticker.js 是一个很小的 JavaScript 库,它允许您在网页中创建漂亮的贴纸效果.没有依赖关系(不需要 jQuery),可以在大多数支持 CSS3 的主流浏览器工作.下面有简单的使用示 ...
- session204 imessageApp sticker part I要点
session204 imessageApp sticker partI 工程文件:https://developer.apple.com/library/prerelease/content/sam ...
- Codeforces Round #337 Alphabet Permutations
E. Alphabet Permutations time limit per test: 1 second memory limit per test: 512 megabytes input: ...
- sticker.js贴纸效果
http://stickerjs.cmiscm.com/ <div class="sticker gbtags"></div> <!-- 引用Java ...
- Amazon.com: NEW VI AND VIM EDITOR KEYBOARD STICKER: Office Products
Amazon.com: NEW VI AND VIM EDITOR KEYBOARD STICKER: Office Products NEW VI AND VIM EDITOR KEYBOARD S ...
- App Extensions篇之Sticker Pack Extension
转载请标明原文链接:http://www.cnblogs.com/zhanggui/p/7151795.html 前言 上一篇文章对App Extension做了简单介绍以及对Share Extens ...
- 福布斯最佳雇主榜:谷歌母公司Alphabet再登榜首 微软次之
http://www.sohu.com/a/259018538_114774 站长之家(ChinaZ.com) 10月12日 消息:在福布斯发布的最新全球最佳雇主榜单中,谷歌母公司Alphabet以满 ...
- English Phonetic Spelling Alphabet
https://www.englishclub.com/vocabulary/english-phonetic-spelling.htm When speaking on the telephone ...
随机推荐
- 2018年全国多校算法寒假训练营练习比赛(第一场)G 圆圈
https://www.nowcoder.com/acm/contest/67/G 思路: 分形. 记录中间左边点的坐标,然后推出另外3个点的坐标,递归到最简单的情况. 代码: #include< ...
- MySQL缓存机制
对MySql查询缓存及SQL Server过程缓存的理解及总结 一.MySql的Query Cache 1.Query Cache MySQL Query Cache是用来缓存我们所执行的SELE ...
- dubbo为consumer创建代理
ReferenceConfig.init()方法中获取到了最终的代理对象,先观察一下代理对象的视图. 默认使用javassist生成动态类,可配置proxy为jdk,则使用jdk动态代理: <d ...
- 使用GAN 进行异常检测——anoGAN,TODO,待用于安全分析实验
先说实验成功的代码: git clone https://github.com/tkwoo/anogan-keras.git mkdir weights python main.py --mode t ...
- keras-anomaly-detection 代码分析——本质上就是SAE、LSTM时间序列预测
keras-anomaly-detection Anomaly detection implemented in Keras The source codes of the recurrent, co ...
- ES bulk源码分析——ES 5.0
对bulk request的处理流程: 1.遍历所有的request,对其做一些加工,主要包括:获取routing(如果mapping里有的话).指定的timestamp(如果没有带timestamp ...
- Spring Boot 学习(一) 快速搭建SpringBoot 项目
快速搭建一个 Spring Boot 项目 部分参考于<深入实践Spring Boot>.<Spring实战 第四版>与程序猿DD的有关博客. 参考(嘟嘟独立博客):http: ...
- openshift rhc
Microsoft Windows [Version 6.1.7601]Copyright (c) 2009 Microsoft Corporation. All rights reserved. C ...
- 【转载】maven入门1
学习maven的使用,看到一篇很实用的入门教程(菜鸟级入门) 2007-08-28 14:01:04 标签:maven 职场 休闲 一.前言 早就知道maven 在java 项目的管理 ...
- MySQL 中Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化
一.ICP优化原理 Index Condition Pushdown (ICP),也称为索引条件下推,体现在执行计划的上是会出现Using index condition(Extra列,当然Extra ...