#include #include #include int porownaj(char *, char *); int czyNaturalna(char *); int compare(const void *x, const void *y); int czyElement(char *, char*); int czyPodzbior(char*, char*); char zbior[100001], *stos[1000], *elem[1000], *wsk; int wynik=1; int main() { int zag=0, i=0, ile_el, ile_stos, j=0, a=0, b=0, pom; while(scanf("%s", &zbior)!=EOF) { zag=0; /*czyNaturalna(zbior);*/ wsk=&zbior[1]; /***************dodaj na wskanik do elementu na stos********************/ while((*wsk)!='\0') { if(zag==0) { if(*wsk>='0' && *wsk<='9') { elem[i++]=wsk; /*printf("%c", *elem[i-1]);*/ while(*wsk>='0' && *wsk<='9') wsk++; } else if(*wsk=='{') { elem[i++]=wsk; /*printf("%c", *elem[i-1]);*/ zag++; } } else if(zag>0) { if(*wsk=='}') { zag--;} if(*wsk=='{') zag++; } wsk++; } /***********************************************************************/ ile_el=i; if(ile_el==0) wynik=1; /*jesli istnieje tylko 1 element, to moc=1*/ else { stos[0]=elem[0]; /*odkladamy na drugi stos pierwszy element*/ wynik=1; for(i=1; i='0' && *a<='9') {/*printf(" naturalna%d ", *a - 48);*/return (*a-48);} else { a++; do { if(*a=='{') zag++; else if(*a=='}') { qsort(liczby[zag], ile[zag], sizeof(int), compare); if(zag==0) { if(liczby[0][0]==0) { if(ile[0]==1) {if(wyniczek==1) /*return wyniczek-1; else*/ return wyniczek;} else { for(i=0; i+11) /*liczb w zagniezdzeniu wiecej niz 1*/ { for(i=0; i+1<=ile[zag]; i++) { if(liczby[zag][i]==liczby[zag][i+1] || liczby[zag][i+1]==(liczby[zag][i]+1)); else return -1; } liczby[zag-1][ile[zag-1]++]=liczby[zag][i]; /*na koncu nizszego zagniezdzenia dopisujemy najwiekszy el.*/ } else { liczby[zag-1][ile[zag-1]++]=1; } } else { return -1; } zag--; } else if(*a>='0' && *a<='9') { while((*a)>='0' && (*a)<='9') /*zamiana liczby ze stringa na inta*/ { tabnat[i]=(*a); i++; a++; } liczba=atoi(tabnat); /*printf(" ile[zag]=%d", ile[zag]);*/ ile[zag]++; liczby[zag][ile[zag]-1]=liczba; /*zapisanie liczby do tablicy "liczby"*/ memset(tabnat,0, sizeof(char)*3); i=0; a--; } a++; } while(zag>=0); } /*printf(" liczba:%d zag:%d", wyniczek, ile[0]);*/ return liczba; } int porownaj(char *a, char *b) { int alfa, beta; alfa=czyNaturalna(a); beta=czyNaturalna(b); if(alfa!=-1 && beta!=-1 && alfa!=beta) {/*printf("\n 1 ");*/ return 0;} else if(alfa!=-1 && beta!=-1 && alfa==beta) {/*printf("\n 2chuje ");*/return 1;} else if((alfa==-1 || beta==-1) && alfa!=beta) {/*printf("\n -1 ");*/return 0;} else if(alfa==-1 && beta==-1) { printf(" -3 "); if(czyPodzbior(a,b) && czyPodzbior(b,a)) {/*printf("chuj")*/;return 1;} /*if(czyPodzbior(a,b)==1 && czyPodzbior(b,a)==1) return 1;*/ else return 0; } } int compare(const void *x, const void *y) { const int *X=(const int *)x; const int *Y=(const int *)y; return(X-Y); } int czyElement(char *x, char *y) { long long int zag=0; /*poziom zaglebienia (nawiasy)*/ if(czyNaturalna(x)) return 1; else { while(*y!='}') { y++; if(czyPodzbior(x, y) && czyPodzbior(y, x)) return 1; /* rwnowano zbiorw*/ if(*y==',') y++; /*przejscie do nastepnego el. po napotkaniu ','*/ do { if(*y=='{') zag++; if(*y=='}') zag--; y++; } while(zag!=0); } } zag=0; return 0; } int czyPodzbior(char *x, char *y) { long long int zag=0; int alfa, beta; alfa=czyNaturalna(x); if(alfa!=-1) { beta=czyNaturalna(y); if(alfa==beta) return 1; else return 0; } else { while(*x!='}') { x++; if(!czyElement(x, y)) return 0; if(*x==',') x++; do { if(*x=='{') zag++; if(*x=='}') zag--; x++; } while(zag!=0); } } return 1; }