Grader ne dozvoljava korišćenje funkcije getchar() i ostalih C low level funkcija

Dobar dan.

Skoro, dok sam radio zadatak, radi efikasnijeg vremena i učitavanja podataka, koristio sam funkciju getchar(). Problem je to što grader nasumično daje WA dok koristim učitavanje podataka sa navedenom funkcijom. Imam test primere, i na mom računaru se ispostavilo da sa funkcijom dobijam tačan izlaz, dok grader kaže da je WA. Takođe, ukoliko koristim string, svi testovi mi prođu. Isto, primetio sam da nije moguće koristiti funkciju malloc(), i svaki put kad pokušam koristiti C ll std funkcije na graderu, to nije moguće. Zbog čega se ovo dešava, i zašto grader ne radi sa getchar()-om? Koristim C++.

Hvala unapred.

Koji je zadatak, kako izgleda kod koji koristi getchar() a kako kod koji prolazi? U kom smislu nije moguće koristiti malloc(), koja greška se dešava?

Kod za getchar():

for(int y = 0; y < n; y++) {
        for(int x = 0; x < m;) {
            char c = getchar();

            if(c == '\n')
                continue;
            
            matrica[y][x] = c - '0';

            if(y == n - 1 && matrica[y][x] == 1)
                moguceJed.push_back(x);

            x++;
        }
}

Za malloc() od gradera se ne dešava nikakva greška po graderu osim što ne mogu da alokejtujem u memoriji normalanu listu velicine unsigned long long (uint64_t).

Meni malloc() na ocenjivaču radi:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
    unsigned long long lista = malloc(64 * sizeof(unsigned long long));
    if (lista == NULL) {
        printf("Ne radi\n");
    } else {
        printf("Radi\n");
    }
    return 0;
}

Kao programski jezik izabran je “C”, odnosno komanda koju ocenjivač koristi za prevođenje je gcc -O2 -lm -Wl,--stack=268435456 -o {file}. Opcije “C/C++” i “C++14” koriste C++ prevodilac, i na njima se kod neće prevesti zbog nedostatka kasta u unsigned long long* koji u C nije potreban.

U kojem kontekstu ne radi malloc()? Na kojem zadatku se dešava greška sa ovim getchar() kodom?

Link ka zadatku je pod komentaru u kodu. Čudno, sada malloc() radi, verovatno je bilo nešto privremeno da ga je sprečavalo, ne znam. Ali, getchar() u opšte nisam uspeo da koristim:

// https://petlja.org/sr-Latn-RS/biblioteka/r/Zbirka2/obojeni_lavirint
#include <iostream>
#include <vector>
#include <climits>
using namespace std;

bool dfs(vector<vector<int>> &matrica, int x, int y, int sadaMora, int &n, int &m, vector<vector<bool>> &preso) {
    if
    (
        x < 0 || // normalni location checkeri
        x > m - 1 ||
        y < 0 ||
        y > n - 1 ||
        matrica[y][x] != sadaMora ||
        preso[y][x]
    ) return false;

    preso[y][x] = true;
    if(y == 0) return true;
    
    if(sadaMora == 4) sadaMora = 1;
    else sadaMora++;

    if
    (
        dfs(matrica, x - 1, y, sadaMora, n, m, preso) ||
        dfs(matrica, x + 1, y, sadaMora, n, m, preso) ||
        dfs(matrica, x, y - 1, sadaMora, n, m, preso) ||
        dfs(matrica, x, y + 1, sadaMora, n, m, preso)
    ) return true;
    else return false;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, m;
    cin >> n >> m;

    vector<vector<int>> matrica(n, vector<int>(m));
    vector<vector<bool>> preso(n, vector<bool>(m));
    vector<int> moguceJed;
    
    // dok ovaj ne radi na graderu, na mom lokalnom kompu da (koristim ubuntu 24.04)
    for(int y = 0; y < n; y++) {
        for(int x = 0; x < m;) {
            char c = getchar();

            if(c == '\n')
                continue;
            
            matrica[y][x] = c - '0';

            if(y == n - 1 && matrica[y][x] == 1)
                moguceJed.push_back(x);

            x++;
        }
    }
    
     // ovaj kod radi na graderu i na mom kompu
    /*for(int y = 0; y < n; y++) {
        string tmp;
        cin >> tmp;
        for(int x = 0; x < m; x++) {
            matrica[y][x] = char(tmp[x]) - '0';
            if(char(tmp[x]) == '1' && y == n - 1)
                moguceJed.push_back(x);
        }
    }*/

    for(int &jed : moguceJed) {
        if(!dfs(matrica, jed, n - 1, 1, n, m, preso))
            continue;
        else {
            cout << "da\n";
            return 0;
        }
    }
    
    cout << "ne\n";
    return 0;
}

Takođe, vaš kod ne radi, treba prepraviti malloc() liniju, dodat je pointer, i konverzija u uint64_t:

unsigned long long *lista = (unsigned long long *)malloc(64 * sizeof(unsigned long long));

Testirajuci getchar na Petlja - Arena deluje mi da getchar za jezik C radi.

Kao što sam prethodno napisao, ne radi ako se kompajlira kao C++. Kast nije potreban u C. (Istina, doduše, da sam zaboravio da lista treba da bude pokazivač.)

Probao sam sad ovaj kod, i deluje da ti problem prave prve dve linije koje odvezuju stdio od iostream. Ovaj kod prolazi kada se izabere C++14:

#include <iostream>
#include <vector>
#include <climits>
using namespace std;

bool dfs(vector<vector<int>> &matrica, int x, int y, int sadaMora, int &n, int &m, vector<vector<bool>> &preso) {
    if
    (
        x < 0 || // normalni location checkeri
        x > m - 1 ||
        y < 0 ||
        y > n - 1 ||
        matrica[y][x] != sadaMora ||
        preso[y][x]
    ) return false;

    preso[y][x] = true;
    if(y == 0) return true;
    
    if(sadaMora == 4) sadaMora = 1;
    else sadaMora++;

    if
    (
        dfs(matrica, x - 1, y, sadaMora, n, m, preso) ||
        dfs(matrica, x + 1, y, sadaMora, n, m, preso) ||
        dfs(matrica, x, y - 1, sadaMora, n, m, preso) ||
        dfs(matrica, x, y + 1, sadaMora, n, m, preso)
    ) return true;
    else return false;
}

int main() {
    int n, m;
    cin >> n >> m;

    vector<vector<int>> matrica(n, vector<int>(m));
    vector<vector<bool>> preso(n, vector<bool>(m));
    vector<int> moguceJed;
    
    for(int y = 0; y < n; y++) {
        for(int x = 0; x < m;) {
            char c = getchar();

            if(c == '\n')
                continue;
            
            matrica[y][x] = c - '0';

            if(y == n - 1 && matrica[y][x] == 1)
                moguceJed.push_back(x);

            x++;
        }
    }

    for(int &jed : moguceJed) {
        if(!dfs(matrica, jed, n - 1, 1, n, m, preso))
            continue;
        else {
            cout << "da\n";
            return 0;
        }
    }
    
    cout << "ne\n";
    return 0;
}

Hvala, radi! Izvinjavam se na kasnom odgovoru.