Pagini recente » Cod sursa (job #586990) | Cod sursa (job #2409889) | Cod sursa (job #1851742) | Cod sursa (job #401008) | Cod sursa (job #2456094)
#include <fstream>
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 DP3[15][15][15];
int DP2[15][15];
void Read(){
f >> N >> M >> K;
for(int i = 1; i <= N; i++)
f >> A[i];
}
bool solveK3(int prime){
for(int i = 0; i < prime; i++)
for(int j = 0; j < prime; j++)
DP2[i][j] = 0;
DP2[0][0] = 1;
int Tmp[15][15];
for(int i = 1; i <= N; i++){
for(int j = 0; j < prime; j++)
for(int k = 0; k < prime; k++)
Tmp[j][k] = DP2[j][k];
for(int j = 0; j < prime; j++)
for(int k = 0; k < prime; k++){
int a = j + A[i];
if(a >= prime)
a -= prime;
int b = k + A[i];
if(b >= prime)
b -= prime;
if(DP2[j][k])
Tmp[a][k] = 1, Tmp[j][b] = 1;
}
for(int j = 0; j < prime; j++)
for(int k = 0; k < prime; k++)
DP2[j][k] = Tmp[j][k];
}
return DP2[(M / 3) % prime][(M / 3) % prime];
}
bool solveK4(int prime){
for(int i = 0; i < prime; i++)
for(int j = 0; j < prime; j++)
for(int k = 0; k < prime; k++)
DP3[i][j][k]= 0;
DP3[0][0][0] = 1;
int Tmp[15][15][15];
for(int i = 1; i <= N; i++){
for(int j = 0; j < prime; j++)
for(int k = 0; k < prime; k++)
for(int p = 0; p < prime; p++)
Tmp[j][k][p] = DP3[j][k][p];
for(int j = 0; j < prime; j++)
for(int k = 0; k < prime; k++)
for(int p = 0; p < prime; p++){
int a = j + A[i];
if(a >= prime)
a -= prime;
int b = k + A[i];
if(b >= prime)
b -= prime;
int c = p + A[i];
if(c >= prime)
c -= prime;
if(DP3[j][k][p])
Tmp[a][k][p] = 1, Tmp[j][b][p] = 1, Tmp[j][k][c] = 1;
}
for(int j = 0; j < prime; j++)
for(int k = 0; k < prime; k++)
for(int p = 0; p < prime; p++)
DP3[j][k][p] = Tmp[j][k][p];
}
return DP3[(M / 4) % prime][(M / 4) % prime][(M / 4) % prime];
}
void Solve(){
if(M % K != 0){
g << "NU\n";
return;
}
if(K == 3){
for(int i = 0; i < 6; i++)
if(solveK3(primes[i]) == 0){
g << "NU\n";
return;
}
g << "DA\n";
return;
}
for(int i = 0; i < 6; i++)
if(solveK4(primes[i]) == 0){
g << "NU\n";
return;
}
g << "DA\n";
}
int main()
{
int T;
f >> T;
while(T--){
Read();
Solve();
}
return 0;
}