本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2023-09-05 22:55:34
看到好多大佬都在写,我也来写一发
根据其他大佬的思路,我们可以想到用以下字符串作为基本串。
ccccccccccccccccccccc……
之后我们要找到一个等价于相同长度连续 $c$ 的字符串,那么首先就可以找到 $dD$。
过程: $c$ 的值是 $99$,所以 $cc$ 的贡献是 $99×31+99×1=3168$,而我们可以通过写一个暴力代码求出与他相同的字符串:
for(char i='a';i<='z';i++){
for(char j='A';j<='Z';j++){
if(i*31+j==3168){
cout<<i<<j<<endl;
}
}
for(char j='a';j<='z';j++){
if(i*31+j==3168){
cout<<i<<j<<endl;
}
}
}
for(char i='A';i<='Z';i++){
for(char j='A';j<='Z';j++){
if(i*31+j==3168){
cout<<i<<j<<endl;
}
}
for(char j='a';j<='z';j++){
if(i*31+j==3168){
cout<<i<<j<<endl;
}
}
}
之后我们就要想办法构造出每一种的字符串。可以发现总共 $n$ 的值与最长的字符串的值相同,所以我们可以按照 $n$ 的大小构造字符串的长度。然后把所有的字符串每一次选取两个字符修改为 $dD$,在输出。为了防止越界,需要把 n==1000 时字符串的长度控制在规定长度内,然后剩下的输出一个含有两个 $dD$ 的字符串即可。
CODE:
#include<bits\/stdc++.h>
using namespace std;
string c;
int n;
int main(){
cin>>n;
for(int i=0;i<n+1;i++) c+="c";
if(n==1000){
c=c.substr(0,1000);
printf("dDdD");
for(int i=5;i<=1000;i++) putchar('c');
putchar('\n');
}
for(int i=1;i<=999*(n==1000)+n*(n!=1000);i++){
string s=c;
s[i-1]='d';s[i]='D';
cout<<s<<"\n";
}
return 0;
}

鲁ICP备2025150228号