Pagini recente » Cod sursa (job #67327) | Cod sursa (job #1026423) | Cod sursa (job #1185606) | Cod sursa (job #2532063) | Cod sursa (job #2456230)
#include <fstream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream f("sate2.in");
ofstream g("sate2.out");
int primes[] = {2, 3, 5, 7, 11, 13};
int N, M, K;
int A[3005];
int Bag[5];
vector <int> People[5];
const int maxIterations = 1000000;
void Read(){
f >> N >> M >> K;
for(int i = 1; i <= N; i++){
f >> A[i];
int place = rand() % K + 1;
Bag[place] += A[i];
People[place].push_back(A[i]);
}
}
int maxBag(){
int PMax = 1, Max = Bag[1];
for(int i = 2; i <= K; i++){
if(Bag[i] > Max){
Max = Bag[i];
PMax = i;
}
}
return PMax;
}
int minBag(){
int PMin = 1, Min = Bag[1];
for(int i = 2; i <= K; i++){
if(Bag[i] < Min){
Min = Bag[i];
PMin = i;
}
}
return PMin;
}
void Erase(int pos, int place){
swap(People[place][pos], People[place][People[place].size() - 1]);
People[place].pop_back();
}
void Solve(){
if(M % K != 0){
g << "NU\n";
return;
}
for(int i = 1; i <= maxIterations; i++){
int from = maxBag(), to = minBag();
if(Bag[from] == Bag[to]){
g << "DA\n";
return;
}
int posFrom = rand() % People[from].size();
//int posTo = rand() % People[to].size();
Bag[from] += - People[from][posFrom];
Bag[to] += People[from][posFrom];
People[to].push_back(People[from][posFrom]);
Erase(posFrom, from);
//Erase(posTo, to);
}
g << "NU\n";
}
int main()
{
int T;
srand(time(NULL));
f >> T;
while(T--){
Read();
Solve();
for(int i = 1; i <= K; i++){
Bag[i] = 0;
People[i].clear();
}
}
return 0;
}