题目描述
给定长度为 n 的非负整数序列 a1,a2,…,an 和正整数 k。
你需要构造一个长度为 n 的非负整数序列 b1,b2,…,bn,满足:
- ∀1≤i≤n,bi∈[0,2k);
- ∀1≤i≤n,popcount(bi⊕bimodn+1)=ai。
或者报告不存在合法解。
这里,⊕ 代表按位异或运算,popcount(n) 表示非负整数 n 二进制表示下 1 的个数。
特别地,如果你正确地判断了解的存在性,也可以得到部分分,见【计分方式】。
输入格式
本题单个测试点内含有多组测试数据。
第一行,正整数 T,表示测试数据组数。
接下来描述 T 组测试数据:
每组数据第一行,两个正整数 n,k。
每组数据第二行,n 个非负整数 a1,a2,…,an。
输出格式
对于每组数据,如果无解,输出一行一个 NO;
否则输出 (n+1) 行,第一行输出 YES,接下来 n 行,第 i 行一个长度为 k 的 01 串,表示 bi 二进制表示下的低 k 位。
提示
数据范围
对于 100% 的数据,保证:
- 1≤T≤105;
- 2≤n;
- 1≤k;
- 2≤nk,∑nk≤5×106;
- 0≤ai≤k。
- Subtask 0 (0 pts):样例。
- Subtask 1 (5 pts):T,n,k≤5。
- Subtask 2 (2 pts):k=1。
- Subtask 3 (8 pts):k=2。
- Subtask 4 (32 pts):ai≤k/2。
- Subtask 5 (24 pts):n≤5×104,k≤20。
- Subtask 6 (29 pts):无额外约束。
计分方式
如果你正确地判断了解的存在性,但是构造的解不正确,你可以获得 50% 的分数。
如果你只想获得 50% 的分数,也要保证输出格式正确,否则将无法得分。
每个子任务的分数为其中每个测试点分数的最小值。