Pagini recente » Cod sursa (job #2197541) | Cod sursa (job #832125) | Cod sursa (job #1365777) | Cod sursa (job #1647241) | Cod sursa (job #1709471)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <cstdio>
#include <ctime>
#define LL long long
#define x first
#define y second
#define mp make_pair
#define DN 100005
#define ITER 2000023
using namespace std;
typedef pair<int,int> per;
int t,n,m,k,sum[4];
vector<vector<int> > v;
int main() {
//ifstream f("input.txt");
ifstream f("sate2.in");
ofstream g("sate2.out");
srand(time(NULL));
for(f>>t;t--;) {
f>>n>>m>>k;
v.resize(k);
string r="NU";
for(int i=0; i<k; ++i) {
sum[i]=0;
v[i].clear();
}
for(int i=0; i<n; ++i) {
int x,im; f>>x;
for(int i=1; i<k; ++i) if(sum[i]<sum[im]) im=i;
sum[im]+=x;
v[im].push_back(x);
}
for(int _i=0; _i<=ITER; ++_i) {
int im=0,iM=0;
for(int i=0; i<k; ++i) {
if(sum[i]<sum[im]) im=i;
if(sum[i]>sum[iM]) iM=i;
}
if(rand()%2 && v[iM].size() && v[im].size()) {//mut din min in max
int pm=rand()%v[im].size(),pM=rand()%v[iM].size();
sum[im]-=v[im][pm]; sum[im]+=v[iM][pM];
sum[iM]-=v[iM][pM]; sum[iM]+=v[im][pm];
swap(v[im][pm],v[iM][pM]);
}else {
sum[iM]-=v[iM].back(); sum[im]+=v[iM].back();
v[im].push_back(v[iM].back()); v[iM].pop_back();
}
int b=1;
for(int i=1; i<k; ++i) if(sum[i]!=sum[i-1]) b=0;
if(b) r="DA";
}
g<<r<<'\n';
}
}