您的位置:首页 > 编程语言 > Go语言

[Google APAC 2017] Lazy Spelling Bee

2016-07-05 15:00 453 查看

Problem

In the Lazy Spelling Bee, a contestant is given a target word W to spell. The contestant's answer word A is acceptable if it is the same length as the target word, and the i-th letter of A is either the
i-th, (i-1)th, or (i+1)th letter of W, for all i in the range of the length of A. (The first letter of A must match either the first or second letter of W, since the 0th letter of W doesn't exist. Similarly, the last letter of A must match either the last
or next-to-last letter of W.) Note that the target word itself is always an acceptable answer word.
You are preparing a Lazy Spelling Bee, and you have been asked to determine, for each target word, how many distinct acceptable answer words there are. Since this number may be very large, please output
it modulo 1000000007 (109 + 7).

Input

The first line of the input gives the number of test cases, TT test cases follow; each consists of one line with a string consisting only of lowercase English letters
(
a
 through
z
).

Output

For each test case, output one line containing "Case #x: y", where x is the test case number (starting from 1) and y is the number of distinct acceptable answer words, modulo 109 + 7.

Limits

1 ≤ T ≤ 100.

Small dataset

1 ≤ length of each string ≤ 5.

Large dataset

1 ≤ length of each string ≤ 1000.

Sample

Input 

 
Output 

 
4
ag
aa
abcde
x

Case #1: 4
Case #2: 1
Case #3: 108
Case #4: 1

In sample case #1, the acceptable answer words are 
aa
ag
ga
,
and 
gg
.
In sample case #2, the only acceptable answer word is 
aa
.

题解:多个数相乘取余。(a*b)%c==(a%c)*(b%c)。 大数据要用Long long

#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("A-large-practice.in", "r", stdin);
freopen("A-large.out", "w", stdout);
int t;
scanf("%d",&t);

string s;
for(int cnt=1;cnt<=t;cnt++) {
cin>>s;
int len=s.size();
long long res=1;
for(int i=0;i<len;i++) {
int tmp=1;
if(i>0&&s[i]!=s[i-1]) tmp++;
if(i+1<len&&s[i]!=s[i+1]&&s[i+1]!=s[i-1]) tmp++;
res=(res*tmp);
res%=1000000007;
}
printf("Case #%d: %lld\n",cnt,res%1000000007);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  谷歌 算法 Google