就是这个字符串由a和b组成的
#include<bits/stdc++.h>
using namespace std;
char s[2][100005];
int t, n, k, a, b;
int main () {
scanf("%d", &t);
for(int i = 1;i <= 100000;++i) s[0][i] = (i+1)%2+'a', s[1][i] = i%2+'a';
while(t--) {
scanf("%d%d%d%d", &n, &k, &a, &b);
if(k > n) {
puts("0");
for(int i = 1;i <= n;++i) printf("%c", s[0][i]);
puts("");
continue;
}
if(a >= b*(n-k+1)) {
printf("%d\n", b*(n-k+1));
for(int i = 1;i <= n;++i) printf("%c", s[0][i]);
}
else if(b >= a*(n-1)) {
printf("%d\n", a*(n-1));
for(int i = 1;i <= n;++i) putchar('a');
}
else {
if(k == 2) {
if(a > b) {
printf("%d\n", b*(n-k+1));
for(int i = 1;i <= n;++i) printf("%c", s[0][i]);
puts("");
}
else {
printf("%d\n", a*(n-1));
for(int i = 1;i <= n;++i) putchar('a');
puts("");
}
continue;
}
char st;
int l = n, sum = a*(1+(n-k)/(k-1));
printf("%d\n", sum);
if(k%2 == 1) st = 'b';
else st = 'a';
for(int i = 1;i <= k-2;++i) printf("%c", s[0][i]);
printf("%c%c", st, st);
l -= k;
while(1) {
if(st == 'a') st = 'b';
else st = 'a';
if(l < k) {
for(int i = 1;i <= l;++i) printf("%c", s[st-'a'][i]);
break;
}
for(int i = 1;i <= k-3;++i) printf("%c", s[st-'a'][i]);
st = s[st-'a'][k-2];
printf("%c%c", st, st);
l -= k-1;
}
puts("");
}
}
return 0;
}