Pagini recente » Cod sursa (job #1536843) | Cod sursa (job #646350) | Cod sursa (job #3179045) | Cod sursa (job #1574370) | Cod sursa (job #1709851)
#include <cassert>
#include <fstream>
#include <cstring>
#include <queue>
#include <algorithm>
#include <bitset>
#include <ctime>
#include <set>
#include <cmath>
#include <iomanip>
#include <map>
#include <stack>
#include <vector>
#include <bitset>
#include <fstream>
using namespace std;
#define FOR(i, a, n) for (int i = a; i <= n; ++i)
#define ROF(i, n, a) for (int i = n; i >= a; i--)
#define FIT(i, v) for (auto &i : v)
#define pb push_back
#define mp make_pair
#define mt make_touple
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define sz(x) ((int)(x).size())
typedef long long ll;
typedef pair<int,int> pii;
const int mod = 2000003;
ll powmod(ll a, ll b) {ll res=1; a %= mod; assert(b >= 0); for(; b; b >>= 1) {if (b & 1) res = res * a % mod; a = a * a % mod;} return res;}
const int N = 6000;
ifstream fin("sate2.in");
ofstream fout("sate2.out");
vector<int> v[14][6], ind;
int a[3010], s[14][6];
int n, m, k[14], sol[14];
int main() {
srand(time(0));
int T;
fin >> T;
clock_t timpA = clock();
FOR(t,1,T) {
fin >> n >> m >> k[t];
FOR(i,1,n) {
fin >> a[i];
if (m % k[t]) {
continue;
}
v[t][i % k[t] + 1].pb(a[i]);
s[t][i % k[t] + 1] += a[i];
}
if (m % k[t] == 0) {
ind.pb(t);
}
}
while ((clock() - timpA) / CLOCKS_PER_SEC < 1.9) {
FIT(it,ind) {
int ma = 0, mi = 0;
FOR(j,1,k[it]) {
if (!ma || s[it][j] > s[it][ma]) {
ma = j;
}
if (!mi || s[it][j] < s[it][mi]) {
mi = j;
}
}
if (s[it][ma] == s[it][mi]) {
sol[it] = 1;
}
else {
int ran2 = rand() % v[it][ma].size();
swap(v[it][ma][ran2], v[it][ma][v[it][ma].size() - 1]);
s[it][ma] -= v[it][ma].back();
s[it][mi] += v[it][ma].back();
v[it][mi].push_back(v[it][ma].back());
v[it][ma].pop_back();
}
}
for(int i = 0; i < ind.size(); ++i) {
if (sol[ind[i]]) {
swap(ind[i], ind[ind.size() - 1]);
ind.pop_back();
break;
}
}
}
FOR(i,1,T) {
if (sol[i]) {
fout << "DA\n";
} else {
fout << "NU\n";
}
}
}