Pagini recente » Profil otilia93 | Cod sursa (job #2698072) | Cod sursa (job #1634924) | Cod sursa (job #1256942) | Cod sursa (job #1710436)
#include<cstdio>
#include<cstring>
#include<cstdlib>
#define MAXN 3000
int v[4][MAXN+1],sum[4],k;
int findMax(){
int i,r=0;
for(i=1;i<k;i++)
if(sum[i]>sum[r])
r=i;
return r;
}
inline void swap(int p,int a,int b){
int aux=v[p][a];
v[p][a]=v[p][b];
v[p][b]=aux;
}
int main(){
freopen("sate2.in","r",stdin);
freopen("sate2.out","w",stdout);
int tests,test,n,m,p,x,ok,e,i,pozMax,pozMin;
scanf("%d",&tests);
for(test=1;test<=tests;test++){
memset(sum,0,sizeof(sum));
memset(v,0,sizeof(v));
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++){
scanf("%d",&x);
p=rand()%k;
v[p][++v[p][0]]=x;
sum[p]+=x;
}
ok=1000000;
pozMax=findMax();
if(m%k!=0)
ok=0;
e=m/k;
while((ok)&&((sum[pozMax]>e))){
p=rand()%v[pozMax][0]+1;
pozMin=rand()%k;
if(pozMin!=pozMax){
ok--;
swap(pozMax,p,v[pozMax][0]);
v[pozMin][++v[pozMin][0]]=v[pozMax][v[pozMax][0]];
sum[pozMin]+=v[pozMax][v[pozMax][0]];
sum[pozMax]-=v[pozMax][v[pozMax][0]];
v[pozMax][0]--;
}
pozMax=findMax();
}
if(ok)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}