Rezultati

Up. imeNalogaJezikRezultatČas oddaje
jam-2018 Zemljiški kataster C++ 0/100Napaka med izvajanjem / ob izhodu (RTE) 13. okt '18 @ 14:17

Test Točke Porabljen spomin Porabljen čas Status
#1 10/10 3,031 MiB 0,004 s OK
#2 10/10 4,031 MiB 0,007 s OK
#3 10/10 12,969 MiB 0,000 s OK
#4 10/10 12,973 MiB 0,017 s OK
#5 0/10 4,094 MiB 0,034 s Napaka med izvajanjem / ob izhodu
#6 0/10 14,777 MiB 0,269 s Napaka med izvajanjem / ob izhodu
#7 0/10 512,012 MiB 1,220 s Prekoračen spomin
#8 0/10 14,773 MiB 0,172 s Napaka med izvajanjem / ob izhodu
#9 0/10 512,043 MiB 1,376 s Prekoračen spomin
#10 0/10 512,016 MiB 1,089 s Prekoračen spomin

Ocenjevani program (main.cpp):
#include <iostream>
#include <vector>
#include <utility>
#include <tuple>
#include <string>
#include <sstream>
#include <algorithm>
#include <list>
#include <map>
#include <cmath>

using namespace std;

template <typename T> void print(vector<T> &tab) {
  for (T i : tab)
    cout << i << ", ";
  cout << endl;
}

int main() {
  cout.precision(12);
  ios::sync_with_stdio(false);

  int visina, sirina;

  cin >> visina >> sirina;

  int **k = new int*[sirina];
  for (int i = 0; i < sirina; ++i) {
    k[i] = new int[visina];
  }

  for (int y = 0; y < visina; ++y) {
    for (int x = 0; x < sirina; ++x) {
      cin >> k[x][y];
    }
  }

  int *z = new int[10000];

  int t;
  cin >> t;
  while(t--) {

    int a, b;
    cin >> a >> b;
    a--;
    b--;

    int vsa = 0;
    int razlicna = 0;

    int ***point = new int**[sirina];
    for (int i = 0; i < sirina; ++i) {
      point[i] = new int*[visina];
    }

    for (int y = 0; y < visina; ++y) {
      for (int x = a; x <= b; ++x) {

        // cout << "preverjam " << x << " " << y;

        bool enakaKotLevo = x > a && k[x][y] == k[x-1][y];
        bool enakaKotGor = y > 0 && k[x][y] == k[x][y-1];

        if(enakaKotLevo && enakaKotGor) {
          if(*point[x][y-1] == *point[x-1][y]) {
            point[x][y] = point[x-1][y];
          } else {
            *point[x-1][y] = *point[x][y-1];
            razlicna--;
            point[x][y] = point[x-1][y];
          }
        } else if(enakaKotLevo) {

          point[x][y] = point[x-1][y];
        } else if(enakaKotGor) {
          point[x][y] = point[x][y-1];
        } else {
          z[vsa] = vsa;
          point[x][y] = &z[vsa];
          vsa++;
          razlicna++;
        }

        // cout << "zemljicse: " << k[x][y] << " parcela: " << *point[x][y] << endl;
      }
    }
    cout << razlicna << endl;
  }

}

/*
4 3 4
1 4 3 1
2 1 2

*/