Distinct Sub-palindromes(思维题)
程序员文章站
2022-08-17 13:16:36
题目链接题目:设一个字符串的值为其所含回问子串的个数,给你一个数字n,全由小写字母构成的长度为n的值最小的字符串由多少个。思路:分两种情况,当n小于三的时候任意字符串的值都相等,稍微想想就知道如果字符串中每个字符不同那么值就为长度,当有字符是同一字符时,虽然长度为1的回文子串少了但长度大于1的会问子串必然增加所以值还是等于1.但当n大于3时情况发生了改变,含有相同字符时子串可能不会增加如:abca,原因是因为中间含有两个不同的字符导致不回文,所以我们构造字符串时相同字符之间至少要隔两个字符,又为了使回文...
题目链接
题目:设一个字符串的值为其所含回问子串的个数,给你一个数字n,全由小写字母构成的长度为n的值最小的字符串由多少个。
思路:分两种情况,当n小于3的时候任意字符串的值都相等,稍微想想就知道如果字符串中每个字符不同那么值就为长度,当有字符是同一字符时,虽然长度为1的回文子串少了但长度大于1的回文子串必然增加所以值还是等于n.但当n大于3时情况发生了改变,含有相同字符时子串可能不会增加如:abca,原因是因为中间含有两个不同的字符导致不回文,所以我们构造字符串时相同字符之间至少要隔两个字符,又为了使回文串最少所以只能隔两个。又因为单个不同的字符也算一个回文串。为了使值最少所以后面使用的字符要尽可能是前面已经出现过的字符。所以根据上述条件可以得出一个简单但深刻的结论:该字符串是以前三个不同字符为循环节的字符串时值最小。
ac代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
#define int long long
const int mod = 998244353;
signed main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t; cin >> t;
while (t--) {
int a; cin >> a;
if (a == 1) cout << 26 << endl;
if (a == 2) cout << 676 << endl;
if (a == 3) cout << 17576 << endl;
if (a > 3) {
cout << 26 * 25 * 24 << endl;
}
}
return 0;
}
本文地址:https://blog.csdn.net/chineseherofeng/article/details/107498540
推荐阅读
-
loj#2509. 「AHOI / HNOI2018」排列(思维题 set)
-
洛谷P4424 [HNOI/AHOI2018]寻宝游戏(思维题)
-
AtCoder Beginner Contest 173(E 思维模拟 F 容斥 思维题 )
-
hdu 5671 Matrix(BC——思维题)
-
cf1282C 贪心 思维题
-
Distinct Sub-palindromes(思维题)
-
A. Add Odd or Subtract Even(思维题) Codeforces Round #624 (Div. 3)
-
Educational Codeforces Round 60 (Rated for Div. 2) ----A - Best Subsegment(思维题)
-
LeetCode-1073 负二进制数相加(思维题)
-
构造思维+树形结构 Codeforces Round #612 (Div. 2) D题 Numbers on Tree