Codeforces Round 923 (Div. 3) B题 题解

· · 题解

两个月没打 CF 了,这次打了,顺便就写篇题解吧。

题意

根据以下要求构造长度为 $n$ 的字符串 $s$。$s$ 由小写字母组成。 给定长度为 $n$ 的数组 $a$,分别为 $a_1,a_2,a_3,\dots,a_n$,其中,$a_i$ 表示 $s_i$ **所对应的字母**在 $s_i$ 之前出现了 $a_i$ 次。 **数据保证有解。** 对于所有数据,保证 $1\le t\le10^4$,$1\le n,\sum n\le2\times10^5$。 ## 思路 CF 中常见的简单构造题。 用 $ans$ 数组存储每一个字符出现了多少次,**每次都要初始化为 $0$**。 数组 $a$ 每输入一个,就从 $a$ 到 $z$ 中寻找对应的 $ans$ 值等于 $a_i$ 的,**然后可立即输出**。接着要**把对应的 $ans$ 值加 $1$**。**然后立刻 break 掉**。 最后换行即可。 ## 代码 代码和讲的有点不太一样,请接受。 ```cpp #include<bits/stdc++.h> using namespace std; int ans[125]; void solve(){ memset(ans,0,sizeof(ans)); int n; cin>>n; for(int i=1;i<=n;i++){ int num; cin>>num; for(char j='a';j<='z';j++){ if(ans[j]==num){ ans[j]++; cout<<j; break; } } } cout<<endl; return; } int main(){ int T; cin>>T; while(T--) solve(); return 0; } ```