Codeforces Round 923 (Div. 3) B题 题解
include13_fAKe
·
·
题解
两个月没打 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;
}
```