Promblem A 小G的字符串
给定$n,k$,构造一个长度为$n$,只能使用$k$种小写字母的字符串。
要求相邻字符不能相同且$k$种字母都要出现
输出字典序最小的字符串,无解输出$-1$。
对于$100\%$的数据满足$\leq n \leq 10^5$
Solution :
我们考虑构造,显然是形如$a,b,a,b,...,c,d...$的字符串。
即从$[1,n-k+2]$交替填$a,b$,然后$[n-k+3,n]$依次填$c,d,e ... $
这样构造的时间复杂度是$O(n)$
# pragma GCC optimize(3) # include <bits/stdc++.h> using namespace std; const int N=1e5+10; char ans[N]; int n,k; int main() { freopen("str.in","r",stdin); freopen("str.out","w",stdout); scanf("%d%d",&n,&k); if (k == 1 && n == 1) { puts("a"); return 0; } if (k > n || k ==1) { puts("-1"); return 0; } char now='c'; for (int i=n-k+3;i<=n;i++) ans[i]=now++; int op = 0; for (int i=1;i<n-k+3;i++,op=1-op) ans[i]='a'+op; for (int i=1;i<=n;i++) putchar(ans[i]); puts(""); return 0; }