维护当前前缀中每个小写字母的出现次数。位置 i 的 ai 表示:在它之前,与将要放置的类别标记相同的字母已经出现了 ai 次。
因此还原第 i 个标记时,只需找到一个当前出现次数恰好为 ai 的小写字母放上去,再把该字母计数加 1。
贪心过程:
26 个小写字母出现次数都为 0;档案室把 n 份文件排成一列,每份用一个小写字母标记类别,得到字符串 s(下标从 1 开始)。同时留下数组 a1,a2,…,an,其中 ai 表示在位置 i 之前,与 si 相同的字母已经出现了多少次。现在类别串丢失,只剩下数组 a。管理员需要根据 a 还原任意一条由小写字母构成、且与 a 相符的标记串;若不存在,输出 -1。若有多种合法串,输出任意一种即可。
约束:测试组数不超过 10000,单组长度不超过 200000,所有组 n 之和不超过 200000,且 0≤ai≤n。
每个测试文件包含多组数据。第一行一个整数 T,表示组数。 每组第一行一个整数 n,第二行 n 个整数 a1,a2,…,an。 保证 1≤T≤10000,1≤n≤200000,0≤ai≤n,且所有组 ∑n≤200000。
对每组数据输出一行:无解输出 -1,否则输出任意一条由小写字母构成的合法标记串。
输入
3
5
0 1 0 2 1
4
0 0 0 0
1
0
输出
aabab
abcd
a
说明
第一组从左到右贪心取字母:位置依次放 a,a,b,a,b,得到 aabab。
第二组四个位置都要求当前次数为 0,依次取尚未用过的字母,得到 abcd。
第三组只有一个位置且 a1=‘0‘,输出 a。
输入
1
3
0 1 2
输出
aaa
说明
三次都落在同一字母 a 上,构造出 aaa。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册