Cod sursă (job #567665)

Utilizator avatar Asgari_Armin ARMIN ASGARI Asgari_Armin IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 0,91 kb
Rundă Arhiva de probleme Status evaluat
Dată 19 oct. 2020 13:52:13 Scor 100
#include <cstdio>
#include <cctype>
#include <vector>

using namespace std;

FILE *fin, *fout;

char first;

const int NMAX = 1e5;
int v[NMAX + 1], k;

void skip(){
  do
    first = fgetc(fin);
  while( isspace(first) );
}

int GetNum(){
  int x = 0;
  while( !isdigit(first) )
    first = fgetc(fin);
  while( isdigit(first) ){
    x = x * 10 + (first - '0');
    first = fgetc(fin);
  }
  while( isspace(first) )
    first = fgetc(fin);
  return x;
}

int E(){
  int x = GetNum(), sizes;
  while( first == '(' ){
    sizes = k;
    do{
      skip();
      v[k++] = E();
    }while( first == ',' );
    x = v[sizes + (x - 1) % (k - sizes)];
    sizes = k;
    skip();
  }
  return x;
}

int main() {
  fin = fopen( "bizar.in", "r" );
  fout = fopen( "bizar.out", "w" );
  first = fgetc(fin);
  fprintf( fout, "%d", E());
  fclose( fin );
  fclose( fout );
  return 0;
}