Pagini recente » Cod sursa (job #3184150) | Cod sursa (job #1232831) | Cod sursa (job #2260916) | Cod sursa (job #1159483) | Cod sursa (job #1839284)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sate2.in");
ofstream fout("sate2.out");
struct group {
int size;
int s;
vector <int> v;
group() {
size = 0;
s = 0;
v = vector <int> ();
}
inline void remove(int i) {
size--;
s -= v[i];
swap(v[i], v[size]);
v.pop_back();
}
inline void insert(int x) {
size++;
s += x;
v.push_back(x);
}
inline void move(int i, group &to) {
to.insert(v[i]);
remove(i);
}
inline bool operator <(const group &other) const {
return s < other.s;
}
};
bool solve() {
int n, m, k;
fin >> n >> m >> k;
vector <group> c(k);
mt19937 gen(time(0));
for (int i = 0, x; i < n; i++) {
fin >> x;
c[i % k].insert(x);
}
if (m % k != 0)
return false;
for (int i = 150000; i > 0; i--) {
auto max = max_element(begin(c), end(c));
auto min = min_element(begin(c), end(c));
if (max->s == min->s)
return true;
max->move(gen() % max->size, *min);
}
return false;
}
int main() {
int t;
fin >> t;
while (t--)
fout << (solve() ? "DA\n" : "NU\n");
return 0;
}