小红定义一个字符串的权值为: 长度为3的回文子序列的数量。例如,"abbab"的权值为5,因为有2个"aba"子序列,2个"bab"子序列和1个"bbb"子序列。
现在小红想知道,长度为n的、仅由小写字母组成的字符串的权值之和是多少,你能帮帮她吗?
定义字符串的子序列为:字符串选择若干字符(不一定连续)按原串顺序组成的新串。
输入描述
一个正整数n,不大于10^9
输出描述
长度为n的、仅由小写字母组成的字符串的权值之和。由于答案过大,请对10^9+7取模。
示例1
输入
3
输出
676
说明
以下类型的字符串权值为1∶aba,aaa,qwq等。共有676个。
这题和牛客周赛Round 14 的第四题不一样,那题是子串,字符必须连续,所以系数是 (n-2) ;而这题是子序列,系数是一个组合数(n个字符中选3个)
( n 3 ) = n ( n − 1 ) ( n − 2 ) 6 \binom{n}{3} = \frac{n(n-1)(n-2)}{6} (3n)=6n(n−1)(n−2)
Java代码:
import java.util.Scanner;
public class Test {
static final int MOD = 1000000007;
private static long qpow(long base, int exp) {
long result = 1;
while (exp > 0) {
if ((exp & 1) != 0) {
result = result * base % MOD;
}
base = base * base % MOD;
exp >>= 1;
}
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long n = scanner.nextLong();
if (n < 3) {
System.out.print(0);
} else {
long num = n * (n - 1) % MOD * (n - 2) % MOD / 6;
long count = qpow(26, (int)n - 1) * num % MOD;
System.out.println(count);
}
}
}
代码未经过题目验证