제출 #1140078

#제출 시각아이디문제언어결과실행 시간메모리
1140078c32ardashCutting a rectangle (LMIO18_staciakampis)C++20
25 / 100
250 ms123156 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int KMAX=1e5+5, AMAX=5e6+5; int viz[KMAX], a[KMAX], b[KMAX], k; vector<int> adj[AMAX]; set<int> p; int get_other(int i, int x) { if(a[i]!=x) return a[i]; return b[i]; } void DFS(int x, int y, int nviz) { if(nviz==k) { p.insert(min(x, y)); return; } if(x<AMAX) for(auto i:adj[x]) if(!viz[i]) { viz[i]=1; DFS(x, y+get_other(i, x), nviz+1); viz[i]=0; } if(y<AMAX) for(auto i:adj[y]) if(!viz[i]) { viz[i]=1; DFS(x+get_other(i, y), y, nviz+1); viz[i]=0; } } bool check_spiral_even() { if(k%2==1) return 0; for(int i=2;i<=k/2;i++) if(adj[i].size()==0) return 0; int st=a[k]-k/2+2; for(int i=st;i<=st+k/2-2;i++) if(adj[i].size()==0) return 0; int s=0; for(int i=k/2+1;i<st;i++) if(adj[i].size()>0) s+=i; return (s==st); } bool check_spiral_odd() { if(k%2==0) return 0; for(int i=2;i<=(k-1)/2;i++) if(adj[i].size()==0) return 0; int st=a[k]-(k-1)/2+1; for(int i=st;i<=st+(k-1)/2-1;i++) if(adj[i].size()==0) return 0; int s=0; for(int i=(k-1)/2+1;i<st;i++) if(adj[i].size()>0) s+=i; return (s==st); } signed main() { cin>>k; for(int i=1;i<=k;i++) { cin>>a[i]>>b[i]; adj[a[i]].push_back(i); adj[b[i]].push_back(i); } if(k<=10) { for(int i=1;i<=k;i++) { viz[i]=1; DFS(a[i], b[i], 1); viz[i]=0; } cout<<p.size()<<'\n'; for(auto x:p) cout<<x<<'\n'; return 0; } if((k%2==0 && check_spiral_even()) || (k%2==1 && check_spiral_odd())) cout<<"2\n1\n"<<(k+1)/2; else cout<<"1\n1"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...