题意:给 一个长度为 L 的字符串,问能求出多少个长度为 L 的字符串,使得输出的字符串 i 位与原字符串 i-1、i、i+1 位的任意一位字符相等。
直接扫一遍乘一起取模就可以,注意开 longlong。
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
const int mod = 1e9+7;
int main(){
freopen("../Downloads/A-large-practice.in", "r", stdin);
freopen("ans.out", "w", stdout);
int t; cin >> t;
for(int cas = 1; cas <= t; cas++){
char s[1005];
scanf("%s", s);
int len = strlen(s);
long long ans = 1;
for(int i = 0; i < len; i++){
int tmp = 1;
if(i == 0){
if(i+1<len && s[i]!=s[i+1]) tmp++;
}else if (i == len-1){
if(s[i] != s[i-1]) tmp++;
}else{
if(s[i] != s[i-1]) tmp++;
if(s[i+1]!=s[i] && s[i+1]!=s[i-1]) tmp++;
}
ans =(ans*tmp)%mod;
}
printf("Case #%d: %lld\n", cas, ans);
}
return 0;
}
注意这个平台需要提交的是输出的文本,而不是代码……