Submission #222391

#TimeUsernameProblemLanguageResultExecution timeMemory
222391dwscChecker (COCI19_checker)C++14
110 / 110
847 ms32832 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; struct node{ int next; int colour; node(int _next,int _colour){ next = _next; colour = _colour; } }; int n; bool cmp(ii e1,ii e2){ int dist1 = abs(e1.first-e1.second),dist2 = abs(e2.first-e2.second); dist1 = min(dist1,n-dist1); dist2 = min(dist2,n-dist2); return dist1 < dist2; } string invalid = "neispravna triangulacija"; string notpat = "neispravno bojenje"; string pat = "tocno"; int main(){ int t; cin >> t; cin >> n; int colour[n]; string s; cin >> s; for (int i = 0; i < n; i++) colour[i] = s[i]-48; set<int> available; node* arr[n]; for (int i = 0; i < n; i++){ available.insert(i); arr[i] = new node((i+1)%n,colour[i]); } ii edge[n-3]; map<ii,int> cmap; for (int i = 0; i < n-3; i++){ cin >> edge[i].first >> edge[i].second; edge[i].first--; edge[i].second--; int c; cin >> c; cmap[edge[i]] = c; } int can = 1; sort(edge,edge+n-3,cmp); for (int i = 0; i < n-3; i++){ int a = edge[i].first,b = edge[i].second; if (available.find(a) == available.end() || available.find(b) == available.end()){ cout << invalid; return 0; } if (arr[arr[a]->next]->next == b){ int c = arr[a]->next; int colour1 = cmap[edge[i]],colour2 = arr[a]->colour,colour3 = arr[c]->colour; if (colour1 == colour2 || colour1 == colour3 || colour2 == colour3) can = 0; available.erase(c); arr[a]->next = b; arr[a]->colour = colour1; } else if (arr[arr[b]->next]->next == a){ int c = arr[b]->next; int colour1 = cmap[edge[i]],colour2 = arr[b]->colour,colour3 = arr[c]->colour; if (colour1 == colour2 || colour1 == colour3 || colour2 == colour3) can = 0; available.erase(c); arr[b]->next = a; arr[b]->colour = colour1; } else{ cout << invalid; return 0; } } assert(available.size()==3); int a = *available.begin(); int b = arr[a]->next; int c = arr[b]->next; assert(arr[c]->next == a); assert(available.find(b) != available.end()); assert(available.find(c) != available.end()); int colour1 = arr[a]->colour,colour2 = arr[b]->colour,colour3 = arr[c]->colour; if (colour1 == colour2 || colour1 == colour3 || colour2 == colour3) can = 0; if (can) cout << pat; else cout << notpat; }
#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...