WA 求助
查看原帖
WA 求助
459188
zrt090604楼主2023/2/18 23:04

就是这个字符串由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;
}
2023/2/18 23:04
加载中...