Cod sursa(job #2779670)

Utilizator YusyBossFares Yusuf YusyBoss Data 4 octombrie 2021 18:20:35
Problema Fractii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
#include <math.h>
#define NMAX 1000

using namespace std;

ifstream cin ("compresie.in");
ofstream cout ("compresie.out");

char mat[NMAX + 1][NMAX + 1];
string s;
int poz;

void f(int lst, int cst, int ldr, int cdr) {
  int i, j;

  if (lst > ldr || cst > cdr)
    return;

  int lmed = (lst + ldr) / 2, cmed = (cst + cdr) / 2;
  if (s[poz] == '*') {
    poz++;
    f(lst, cst, lmed, cmed);
    f(lst, cmed + 1, lmed, cdr);
    f(lmed + 1, cst, ldr, cmed);
    f(lmed + 1, cmed + 1, ldr, cdr);
  }
  else if (lst == ldr && cst == cdr)
    mat[lst][cst] = s[poz++];
  else if (s[poz] >= '0' && s[poz] <= '9') {
    while (s[poz] >= '0' && s[poz] <= '9')
      poz++;
    for (i = lst; i <= ldr; i++)
      for (j = cst; j <= cdr; j++)
        mat[i][j] = s[poz];
    poz++;
  }
}

int main() {
  int ns, i, sol1, nmat, n, j, nr;

  cin >> s;
  ns = s.size();

  sol1 = nmat = 0;
  for (i = 0; i < ns; i++) {
    if (s[i] == '*')
      sol1++;
    else if (s[i] >= '0' && s[i] <= '9') {
      nr = 0;
      while (s[i] >= '0' && s[i] <= '9') {
        nr = nr * 10 + s[i] - '0';
        i++;
      }
      nmat += nr;
    }
    else if (s[i] >= 'a' && s[i] <= 'z')
      nmat++;
  }

  n = sqrt(nmat);
  poz = 0;

  f(1, 1, n, n);

  cout << sol1 << "\n";
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++)
      cout << mat[i][j];
    cout << "\n";
  }
  return 0;
}