// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432 // 参考的是题解中第一篇的解法二,我感觉哪个讲的更好一点 #include <iostream> #include <array> using namespace std; const int mod = static_cast<int>(1e9 + 7); array<array<long long int, 3>, 2> a; int main() { long long ans = 0; int n; cin >> n; a[0][0] = 25; a[0][1] = 1; a[0][2] = 0; for (int i = 1; i < n; i++){ a[1][0] = a[0][0] * 25 % mod;//---------当前长度(i+1)的字符中没有字符u的数量是在长度为i没有u的字符串后面随便加一个除了u以外的字符,选项有25个 a[1][1] = (a[0][0] + a[0][1] * 25) % mod;//------长度i+1有字符u但是没有字串us是在长度为i没有u的后面加一个u(只有一个选项),或在长度为i有u没us的字符串后面加一个除了s以外的字符(25个选项) a[1][2] = (a[0][1] + a[0][2] * 26) % mod;//-------长度为i+1有字串us,是在长度i有u的后面加一个s(一个选项),或在长度i有us的后面加上任意字符(选项26个) for (int j = 0; j < 3; j++){ a[0][j] = a[1][j]; } ans += a[1][2];//---------题目求的是长度不超过n的字符串,所以各个长度的答案都要累加 ans %= mod; } cout << ans; return 0; } // 64 位输出请用 printf("%lld")