제출 #222499

#제출 시각아이디문제언어결과실행 시간메모리
222499errorgornChecker (COCI19_checker)C++14
0 / 110
8 ms2700 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ii pair<ll,ll> #define iii pair<ii,ll> //#define endl '\n' int n; string sides; set<int> al[3005]; struct trip{ int a,b,c; trip (int _a,int _b,int _c){ a=_a,b=_b,c=_c; } }; vector<trip> tri; map<ii,char> color; bool dfs(int i,int j){ //cout<<i<<" "<<j<<endl; //note here that it returns true if triangulation does not exist if ((j+1)%n==i){ al[i].erase(j); al[j].erase(i); return false; } else{ auto curr=al[i].find(j); auto it=(curr==(--al[i].end()))?al[i].begin():next(curr); //cout<<"DEBUG: "<<i<<" "<<*it<<" "<<j<<endl; tri.push_back(trip(i,j,*it)); if (i<j && i<*it && *it<j) return true; if (j<i && (i<*it || *it<j)) return true; al[i].erase(j); al[j].erase(i); if (dfs(i,*it)||dfs(*it,j)) return true; //cout<<"RET "<<i<<" "<<j<<endl; return false; } } int main(){ //freopen("input.txt","r",stdin); ios::sync_with_stdio(0); cin.tie(0); cin>>n; //bye bye cin>>n; cin>>sides; for (int x=0;x<n;x++){ al[x].insert((x+1)%n); al[(x+1)%n].insert(x); color[ii(x,(x+1)%n)]=sides[x]; color[ii((x+1)%n,x)]=sides[x]; } int a,b; char c; for (int x=3;x<n;x++){ cin>>a>>b>>c; a--,b--; al[a].insert(b); al[b].insert(a); color[ii(a,b)]=c; color[ii(b,a)]=c; } //we need another case for n==4 bruh if (n==4){ if (a>b) swap(a,b); if (a==0 && b==2){ tri.push_back(trip(0,1,2)); tri.push_back(trip(2,3,0)); } else if (a==1 && b==3){ tri.push_back(trip(1,2,3)); tri.push_back(trip(3,0,1)); } else{ cout<<"neispravna triangulacija"; return 0; } } else { if (dfs(0,1)){ cout<<"neispravna triangulacija"; return 0; } } //cout<<"NICE"<<endl; //now we check for legit colours if (tri.size()!=n-2) return 1; for (auto &it:tri){ //cout<<it.a<<" "<<it.b<<" "<<it.c<<endl; //cout<<color[ii(it.a,it.b)]<<" "<<color[ii(it.b,it.c)]<<" "<<color[ii(it.c,it.a)]<<endl; if (color[ii(it.a,it.b)]==color[ii(it.a,it.c)] || color[ii(it.b,it.a)]==color[ii(it.b,it.c)] || color[ii(it.c,it.a)]==color[ii(it.c,it.b)] ){ cout<<"neispravno bojenje"; return 0; } } cout<<"tocno"; } //neispravna triangulacija -2 //neispravno bojenje -1 //tocno 0

컴파일 시 표준 에러 (stderr) 메시지

checker.cpp: In function 'int main()':
checker.cpp:113:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if (tri.size()!=n-2) return 1;
      ~~~~~~~~~~^~~~~
#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...