Submission #198002

#TimeUsernameProblemLanguageResultExecution timeMemory
198002model_codeChecker (COCI19_checker)C++17
110 / 110
204 ms7044 KiB
#include <bits/stdc++.h>
using namespace std;

#define TRACE(x) cerr << #x << " = " << x << endl
#define _ << " _ " <<

#define fi first
#define se second
 
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;

const string CORRECT = "tocno";
const string WRONG_TRIANGULATION = "neispravna triangulacija";
const string WRONG_COLORING = "neispravno bojenje";

const int MAXN = 2e5 + 10;

int n;
pii nxt[MAXN];
pair<pii, int> diagonals[MAXN * 2];

int dist(int a, int b) {
    return (b + n - a) % n;
}

bool cmp(const pair<pii, int>& a, const pair<pii, int>& b) {
    return dist(a.fi.fi, a.fi.se) < dist(b.fi.fi, b.fi.se);
}

bool check_triangle(int a, int b, int c) {
    return a + b + c == 6 && a != b;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int t;
    cin >> t;

    cin >> n;
    string colors;
    cin >> colors;
    for (int i = 0; i < n; i++) {
        nxt[i] = {(i + 1) % n, colors[i] - '0'};
    }

    for (int i = 0; i < n - 3; i++) {
        int a, b, c;
        cin >> a >> b >> c;
        a--; b--;

        diagonals[2 * i] = {{a, b}, c};
        diagonals[2 * i + 1] = {{b, a}, c};
    }

    int m = 2 * (n - 3);
    sort(diagonals, diagonals + m, cmp);

    bool coloring = true;

    for (int i = 0; i < n - 2; i++) {
        int a = diagonals[i].fi.fi;
        int b = nxt[a].fi;
        int c = diagonals[i].fi.se;

        int color_a = nxt[a].se;
        int color_b = nxt[b].se;
        int color_c = diagonals[i].se;

        if (nxt[b].fi != c) {
            cout << WRONG_TRIANGULATION << "\n";
            return 0;
        }

        coloring &= check_triangle(color_a, color_b, color_c);

        nxt[a] = {c, color_c};
    }

    if (!coloring) {
        cout << WRONG_COLORING << "\n";
    } else {
        cout << CORRECT << "\n";
    }

    return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...