#include <iostream>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
const int mod = 26;
map <int, char> ma;
map <char, int> ma2;
int chushi()
{
for (int i = 0; i <= 25; ++i)
{
ma[i] = 'a' + i;
}
for (int i = 0; i <= 25; ++i)
{
ma2[ma[i]] = i;
}
}
map <string, bool> vis1;
long long cnt = 0;
map <string, bool> vis2;
map <string, bool> vis3;
const int maxn = 4e5 + 10;
string ans[maxn];
int main()
{
// freopen("sile.out", "w", stdout);
chushi();
// for (int i = 0; i <= 25; ++i)
// {
// cout << ma[i] << ' ';
// }
// cout << '\n';
// for (char i = 'a'; i <= 'z'; ++i)
// {
// cout << ma2[i] << ' ';
// }
string s;
cin >> s;
int siz = s.size();
string now = s;
ans[++cnt] = s;
for (int i = 1; ; ++i)
{
for (int j = 0; j < siz; ++j)
{
now[j] = ma[(ma2[now[j]] + 1) % 26];
}
if (!vis1[now])
{
ans[++cnt] = now;
vis1[now] = 1;
}
else
{
break;
}
}
int last = cnt;
sort(ans + 1, ans + cnt + 1);
for (int i = 1; i <= last; ++i)
{
string now = ans[i];
for (int j = 1; ; ++j)
{
// cout << 1;
for (int k = 0; k < siz; ++k)
{
now[k] = ma[(ma2[now[k]] * 3) % mod];
}
if (vis1[now] == 1 || vis2[now] == 1)
{
if (vis2[now] == 1)
{
break;
}
else
{
break;
}
}
else
{
ans[++cnt] = now;
vis2[now] = 1;
}
}
}
sort(ans + 1, ans + cnt + 1);
last = cnt;
for (int i = 1; i <= last; ++i)
{
string now = ans[i];
for (int j = 1; ; ++j)
{
// cout << 1;
for (int k = 0; k < siz; ++k)
{
now[k] = ma[(26 - ma2[now[k]]) % mod];
}
if (vis3[now] == 1)
break;
if (vis2[now] == 1 || vis3[now] == 1)
continue;
else
{
ans[++cnt] = now;
vis3[now] = 1;
}
}
}
sort(ans + 1, ans + cnt + 1);
cnt = unique(ans + 1, ans + cnt + 1) - ans - 1;
cout << cnt << '\n';
for (int i = 1; i <= cnt; ++i)
{
cout << ans[i] << '\n';
}
return 0;
}
标签:map,cnt,include,有感,int,调过,T1,ans,now
From: https://www.cnblogs.com/xu-jh2024/p/18446305