Pagini recente » Cod sursa (job #41792) | Cod sursa (job #2783358) | Cod sursa (job #2236333) | Cod sursa (job #1009236) | Cod sursa (job #253884)
Cod sursa(job #253884)
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
FILE*f=fopen("episoade.in","r");
FILE*g=fopen("episoade.out","w");
struct Graf
{
int vf;
Graf *urm;
};
Graf *G[102];
int NR; // numar componente conexe
int com[105]; // con[i] - componenta conexa a lui i
int n,t;
char s[1002];
int st[105], vf;
inline void insert(int a, int b)
{
Graf *q;
q=new Graf;
q->vf=b;
q->urm=G[a];
G[a] = q;
}
inline int muchie(int x, int y)
{
Graf *q;
for(q=G[x];q;q=q->urm)
if(q->vf == y) return 1;
return 0;
}
void build()
{
int i,L=strlen(s);
int nr=0;
s[L]='#';
for(i=0;i<=L;++i)
{
if(isdigit(s[i])) nr=nr*10+(s[i]-'0');
else if(s[i]=='>')
{
st[++vf]=nr;
nr=0;
}
else if(s[i]=='#')
{
st[++vf]=nr; nr=0;
//scot din stiva. am muchia st[vf-1] -> st[vf]
NR++; // o noua comp conexa.
do
{
if(vf>1) insert(st[vf-1],st[vf]);
com[st[vf]] = NR;
vf--;
}
while(vf);
}
}
}
int ok(int a[])
{
int i;
int plat[105];
plat[n] = com[a[n]];
for(i=1;i<n;++i)
{
plat[i] = com[a[i]];
if(com[a[i]] == com[a[i+1]])
{
if(!muchie(a[i], a[i+1])) return 0;
}
else
{
if(abs(com[a[i]] - com[a[i+1]])>1) return 0;
}
}
int f[105];
memset(f,0,sizeof(f));
f[plat[1]]=1;
for(i=2;i<=n;++i)
{
if(!f[plat[i]]) f[plat[i]]=1;
else
{
if(plat[i] != plat[i-1]) return 0;
}
}
return 1;
}
int main()
{
fscanf(f,"%s\n",s);
fscanf(f,"%d%d",&t,&n);
int a[105],i;
build();
while(t--)
{
for(i=1;i<=n;++i) fscanf(f,"%d",&a[i]);
if(ok(a)) fprintf(g,"1\n");
else fprintf(g,"0\n");
}
return 0;
}