0%

2025牛客WC2-C-字符串外串

思路讲解

image

这是判断字符串可爱度的代码(也就是这场的D题),可以发现我们发现要尽量让一个字母倒数第二次出现位置尽可能小,第二次出现位置尽可能大,才有可能使字符串“可爱度”尽可能小(当然,如果该字符没有出现或只出现一次,那自然不会对可爱度有贡献)

我们先来证明一下这个无解条件

1
if(N-26>M) {cout<<"NO\n";return;}

所以说字符串长度>26,可爱度必然不可能=0

参考题解

https://blog.nowcoder.net/n/906fd00ff386438b9d63013a3760e73a

image

通过取模让各个字符之间的距离保持在N-M+1(a……a的长度为N-M+1)

1
2
3
4
5
6
7
8
9
10
11
void solve(){
cin>>N>>M;
// 各种排除
if(N<=M) {cout<<"NO\n";return;}
if(N-26>M) {cout<<"NO\n";return;}
cout<<"YES\n";
for(int i=0;i<N;++i) {
cout<<char('a'+i%(N-M));
}
cout<<'\n';
}

AC代码

AC

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=75110195

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
typedef array<ll,3> arr;
const ll MAXN=static_cast<ll>(2e5)+10;
ll N,T,M;

void solve(){
cin>>N>>M;
// 各种排除
if(N<=M) {cout<<"NO\n";return;}
if(N-26>M) {cout<<"NO\n";return;}
cout<<"YES\n";
for(int i=0;i<N;++i) {
cout<<char('a'+i%(N-M));
}
cout<<'\n';
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>T;
while (T--) {
solve();
}
return 0;
}
/*

1
16 6
abcdefghijabcdef

2
4 3
3 3

*/

心路历程(WA,TLE,MLE……)