Pagini recente » Cod sursa (job #2823158) | Cod sursa (job #2090052) | Cod sursa (job #2908856) | Cod sursa (job #1175604) | Cod sursa (job #2786100)
#include <bits/stdc++.h>
#define MAXK 6
#define INF 100000000
using namespace std;
vector< int > a[MAXK];
int sums[MAXK];//aici pun sumele din fiecare heap
ifstream fin("sate2.in");
ofstream fout("sate2.out");
const int luck=1e6;
bool checkSums(int n, int neededSum){
for(int i=0; i<n; i++){
if(sums[i]!=neededSum)
return false;
}
return true;
}
int main()
{
srand(time(NULL));
int t, m, n, k;
fin>>t;
for(int evan=0; evan<t; evan++){
fin>>n>>m>>k;
for(int i=0; i<n; i++){
int temp; fin>>temp;
int insertSpot=rand()%(k);
a[insertSpot].push_back(temp);
sums[insertSpot]+=temp;//tinem sumele
}
int tries=0;
while(tries<luck&&!checkSums(k, m/k)){//facem nspe milioane de incercari
int minVal=INF, maxVal=0, minPos=0, maxPos=0;
for(int i=0; i<k; i++){
if(sums[i]<minVal)
minVal=sums[i], minPos=i;
if(sums[i]>maxVal)//gasim minimul si
maxVal=sums[i], maxPos=i;
}
int swapMax=rand()%a[maxPos].size();
sums[minPos]+=a[maxPos][swapMax];
sums[maxPos]-=a[maxPos][swapMax];//o sa-l sterg pe baiatul asta, e lent al naibii, da'nu vad altfel
a[minPos].push_back(a[maxPos][swapMax]);//adaug noul element
a[maxPos].erase(a[maxPos].begin()+swapMax);//si ulterior sterg
tries++;//sa nu uit sa incrementez
}
if(tries==luck)
fout<<"NU\n";
else
fout<<"DA\n";
//ofc, trebuie resetati si vectorii
for(int i=0; i<k; i++)
a[i].clear();
}
return 0;
}