当前位置: 代码迷 >> 综合 >> Problem A. The Alphabet Sticker【简单题、独立事件、思维】
详细解决方案
Problem A. The Alphabet Sticker【简单题、独立事件、思维】
热度:27 发布时间:2023-12-16 22:53:04.0
题意
给你一串字符串,其中有一部分未知,用’?’表示。
现在定义一种合法的Sticker,比如 ” a a b c c ” , “ c c c c a b ” ”aabcc”,“ccccab” ”aabcc”,“ccccab” 。即所有相同的字母要在一起才是合法的。现在请问对于给定的字符串,有多少种合法的结果。
比如: ” a a ? ? b b ” ”aa??bb” ”aa??bb”合法的字符串有三种。 分别是 “ a a a a b b ” “ a a a b b b ” ” a a b b b b ” . “aaaabb” “aaabbb” ”aabbbb”. “aaaabb”“aaabbb””aabbbb”.
‘ ? ’ ‘?’ ‘?’表示的字符只能从已经给出的字符中选,所以 ” a a c c b b ” ”aaccbb” ”aaccbb”是不合法的。
#include<bits/stdc++.h>usingnamespace std;constint mod =1e9+7;intmain(){
int T; cin >> T;while(T--){
string s; cin >> s;ll ans =1;int a =0, b = s.length()-1;while(s[a]=='?')++a;while(s[b]=='?')--b;for(int i = a; i <= b;++i){
if(s[i]=='?'){
int t = i;while(s[t]=='?')++t;if(s[i-1]!= s[t]) ans =(ans *((t - i +1)% mod))% mod;i = t;}}cout << ans << endl;}return0;}