Pagini recente » Cod sursa (job #1637008) | Cod sursa (job #538413) | Cod sursa (job #1503555) | Cod sursa (job #232792) | Cod sursa (job #23633)
Cod sursa(job #23633)
#include <stdio.h>
#include <string.h>
#define NMAX 128
#define EMAX 502
#define modulo 663
FILE *f = fopen("amlei.in","rt"), *g = fopen("amlei.out","wt");
struct hash{long int v[NMAX],poz;
hash *urm;} *vf[modulo];
long int t,n,u,i,j,k,h[EMAX],x,v[NMAX],val,fnd[EMAX];
void init()
{
hash *p;
for (i=0;i<=modulo-1;i++)
{p=vf[i];
while (vf[i])
{
p=vf[i];
vf[i]=vf[i]->urm;
delete p;
}
}
for (i=0;i<=modulo;i++)
vf[i]=NULL;
}
int egal(hash *p)
{
for (i=0;i<=n+51;i++)
if (v[i]!=p->v[i]) return 0;
return 1;
}
long int abs(long int x)
{
if (x<0) return (-1)*x;
return x;
}
void solve()
{
long int ok,sol=0;
fscanf(f,"%ld %ld %ld",&n,&t,&u);
hash *p;
memset(h,0,sizeof(h));
memset(fnd,0,sizeof(fnd));
for (k=1;k<=t;k++)
{
memset(v,0,sizeof(v));
val=1;
for (j=1;j<=n;j++)
{
fscanf(f,"%ld",&x);
x+=51;
v[x]=1;
val=(val*abs(x))%modulo;
}
p=vf[val];
ok=0;
while (p)
{
if (egal(p)) {ok=1;break;}
p=p->urm;
}
if (!ok) {
p=new hash;
for (i=0;i<=n+51;i++)
p->v[i]=v[i];
p->poz=k;
h[k]=1;
p->urm=vf[val];
vf[val]=p;
}
}
for (k=1;k<=u;k++)
{
memset(v,0,sizeof(v));
val=1;
for (j=1;j<=n;j++)
{
fscanf(f,"%ld",&x);
x+=51;
v[x]=1;
val=(val*abs(x))%modulo;
}
if (!sol)
{
p=vf[val];
ok=0;
while (p)
{
if (egal(p)) {ok=1;break;}
p=p->urm;
}
if (ok) fnd[p->poz]=1;
else {fprintf(g,"NU\n");
fscanf(f,"\n");
sol=1;}
}
}
if (!sol)
{
for (i=1;i<=t;i++)
if (h[i]!=fnd[i]) {fprintf(g,"NU\n");
fscanf(f,"\n");
return;}
fprintf(g,"DA\n");
fscanf(f,"\n");
}
}
int main()
{
while (!feof(f))
{
init();
solve();
}
fclose(f);
fclose(g);
return 0;
}