#include #include #include #define LGMAX 5200002 #define LGMAXOP 300 #define NMAX 20002 using namespace std; ifstream fin("indiciu.in"); ofstream fout("indiciu.out"); char sir[LGMAX]; //expresia char s[LGMAX]; //auxiliar char rez[LGMAX]; char auxrez[LGMAX]; char *valoare; char op[NMAX][LGMAXOP]; //operanzii int lg[NMAX]; //lungimile operanzilor char opt[NMAX]; //operatorii int nrop; //numarul de operanzi int lgcod; //lungimea codului long long int lungime (int x, int nrop); int main() {char *p; int i, j, k, lgrez, lgval, st, dr, lgaux, mij, last, poz; fin.getline(sir,LGMAX); p=strchr(sir,'='); *p=0; valoare=p+1; lgval=strlen(valoare); assert(00 && lg[nrop]<=255); p=sir+i+1; } ++nrop; strcpy(op[nrop],p); lg[nrop]=strlen(op[nrop]); assert(nrop>0 && nrop<=10001); assert(lg[nrop]>0 && lg[nrop]<=255); /*for (i=1; i<=nrop; i++) fout<1) { mij=(st+dr)/2; lgrez=lungime(mij, nrop); if (lgrez>=lgval) dr=mij; else st=mij; } if (lungime(dr, nrop)!=lgval) {fout<<"Eroare\n"; return 0;} //reconstitui codul lgcod=dr; for (last=nrop; op[last][0]!='#'; last--) if (opt[last-1]=='+') {valoare[lgval-lg[last]]=0; lgval-=lg[last];} else { for (j=i=0;valoare[i];i++) {s[j++]=valoare[i]; i+=lg[last];} s[j]=0; strcpy(valoare,s); //fout<0) if (opt[last-1]=='+') for (k=poz; kLGMAX) return LGMAX; } return lgrez; }