Submission #1140068

#TimeUsernameProblemLanguageResultExecution timeMemory
1140068c32ardashCutting a rectangle (LMIO18_staciakampis)C++20
25 / 100
249 ms123068 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() { if(k%2) 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); } 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(check_spiral()) cout<<"2\n1\n"<<k/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...