题意:
一共有
n
n
n 个人,每个人的初始点数均为
k
k
k,之后一共进行
q
q
q 轮游戏,第
i
i
i 轮时除
a
i
a_{i}
ai 之外的其余人点数均减一。
请问到最后这
n
n
n 个人所拥有的点数是否大于
0
0
0。
思路:
首先排除暴力,如果直接暴力的话,
1
0
5
∗
1
0
5
10^{5}*10^{5}
105∗105 的时间复杂度必然会
T
L
E
TLE
TLE。
换个思路想,将每一轮的 “
n
−
1
n-1
n−1 个人均减一” 改为 “
a
i
加
一
a_{i}加一
ai加一” ,并在一开始时将所有人的点数均减
q
q
q 的话,效果与其完全相同。
时间复杂度:
O
(
n
)
O(n)
O(n)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10, M = 350, mod = 1e9 + 7;
int n, k, q;
int s[N];
int main() {
cin >> n >> k >> q;
for (int i = 1; i <= n; i++)
s[i] = k - q;
int x;
while (q--) {
scanf("%d", &x);
s[x]++;
}
for (int i = 1; i <= n; i++)
if (s[i] > 0)
puts("Yes");
else
puts("No");
return 0;
}