题目描述:
Cirno_9baka has a paper tape with \(n\) cells in a row on it. As he thinks that the blank paper tape is too dull, he wants to paint these cells with \(m\) kinds of colors. For some aesthetic reasons, he thinks that the \(i\)-th color must be used exactly \(a_i\) times, and for every \(k\) consecutive cells, their colors have to be distinct.
Help Cirno_9baka to figure out if there is such a way to paint the cells.
输入描述:
The first line contains a single integer \(t (1≤t≤10000)\) — the number of test cases. The description of test cases follows.
The first line of each test case contains three integers \(n\), \(m\), \(k (1≤k≤n≤10^9, 1≤m≤10^5, m≤n)\). Here \(n\) denotes the number of cells, \(m\) denotes the number of colors, and \(k\) means that for every \(k\) consecutive cells, their colors have to be distinct.
The second line of each test case contains \(m\) integers \(a_1,a_2,⋯,a_m (1≤a_i≤n)\) — the numbers of times that colors have to be used. It's guaranteed that \(a_1+a_2+…+a_m=n\).
It is guaranteed that the sum of \(m\) over all test cases does not exceed \(10^5\).
输出描述:
For each test case, output "YES" if there is at least one possible coloring scheme; otherwise, output "NO".
You may print each letter in any case (for example, "YES", "Yes", "yes", and "yEs" will all be recognized as positive answers).
样例:
input:
2
12 6 2
1 1 1 1 1 7
12 6 2
2 2 2 2 2 2
output:
NO
YES
Note:
In the first test case, there is no way to color the cells satisfying all the conditions.
In the second test case, we can color the cells as follows: \((1,2,1,2,3,4,3,4,5,6,5,6)\). For any \(2\) consecutive cells, their colors are distinct.
AC代码:
#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
// x 代表将 n 分为 k 段, y 代表最后不足 k 的长度
int x = n / k, y = n % k;
bool f = 1;
while (m--)
{
int a;
scanf("%d", &a);
// 颜色需要涂的次数如果小于 x 就代表可以把这个颜色涂在 a 个段里
if (a <= x)
continue;
// 如果大于x就代表需要用到最后那一段
// 如果最后一段有剩余并且只会占用一格的话就说明可以涂完
// 否则则要占用大于一格或者最后一段已经被涂满,不满足没有相同颜色
if (a == x + 1 && y)
y--;
else
f = 0;
}
if (f)
cout << "YES\n";
else
cout << "NO\n";
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
solve();
return 0;
}
标签:case,Coloring,cells,colors,each,test,cases
From: https://www.cnblogs.com/KSzsh/p/17045615.html