Pagini recente » Cod sursa (job #61143) | Cod sursa (job #291172) | Cod sursa (job #66743) | Cod sursa (job #3203313) | Cod sursa (job #254849)
Cod sursa(job #254849)
//varianta care functioneaza daca nu exista paranteze
#include<stdio.h>
#define infile "episoade.in"
#define outfile "episoade.out"
#define nmax 101
#define lmax 1001
int p[nmax][nmax]; //matricea de conditii
char v[lmax]; //vectorul in care citim sirul
int x[nmax]; //vectorul in care citim pt fiecare test in ce ordine vrea sa citeasca
int t,n; //numarul de teste, respectiv numarul de episoade
//preprocesam matricea de prioritati
void preprocesare(int p[nmax], char v[lmax], int n)
{
int nr=0,nra=0; //aici refacem numerele, si in nra vom salva numarul anterior
char semn=0; //aici vom avea # sau < sau va ramane 0 daca inca nu avem nicio prioritate
int i=0;
while(v[i]!='\n' && v[i]) //cat timp n-am preprocesat tot
{
if(v[i]>='0'&&v[i]<='9') //avem un episod
{
nra=nr; //salvam numarul care il avem deja
nr=0; //initializam numarul
while(v[i]>='0'&&v[i]<='9') //cat timp numarul are cifre
nr=nr*10+v[i++]-'0'; //adaugam cifra la sfarsitul numarului
if(semn=='>') p[nr]=nra; //episodul nr trebuie vazut imediat dupa episodul nra
}
if(v[i]=='#'||v[i]=='>') semn=v[i++]; //citim semnul
if(v[i]=='('||v[i]==')') i++; //noi nu verificam si pt siruri cu paranteze :((((
}
}
int verifica(int p[nmax], int x[nmax], int n)
{
int i;
for(i=1;i<=n;i++)
if(p[x[i]]) //inseamna ca x[i] are o prioritate
if(x[i-1]!=p[x[i]]) return 0; //nu se respecta prioritatea...deci sir incorect
return 1; //inseamna ca avem un sir corect
}
int main()
{
int i;
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
fgets(v,lmax,stdin); //citim sirul
scanf("%d %d\n",&t,&n);
preprocesare(p,v,n); //preprocesam
while(t--) //avem de verificat siruri
{
for(i=1;i<=n;i++) scanf("%d",&x[i]); //citim ordinea in care vrea sa citeasca baiatu
printf("%d\n",verifica(p,x,n));
}
fclose(stdin);
fclose(stdout);
return 0;
}