题解 | 串

https://www.nowcoder.com/practice/01c35f01fb7343fe9fc16139562f78ed

//  #牛客春招刷题训练营# 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")

#写题解领奖励##牛客春招刷题训练营#
全部评论

相关推荐

11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务