第6届传智杯复赛第一场(补题)_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ
D 小红的字符串同构
这是一个基本的组合数学的问题
首先它规定字符串里的字符是从a-z
n个长度的字符串它有几种组合数?26^n
那么我们先计算总共有多少种 再把同构的情况减掉
如何减去同构的情况 找到最小的字符 min 找到最大的字符 max 那么同构的数量为
26-(min-'a'+'z'-max+1)
具体代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const int N = 2e5 + 5;
int mod = 1e9 + 7;
int main() {
string s;
cin >> s;
long long ma = 0, mi = 1e9;
long long res = 1;
for (int i = 0; i < s.length(); i++) {
ma = max(ma, (long long)(s[i] - 'a'));
mi = min(mi, (long long )(s[i] - 'a'));
res = res * 25 % mod;
}
cout << res - (26 - (ma - mi + 1));
}