Submission #1264788

#TimeUsernameProblemLanguageResultExecution timeMemory
1264788Nika533Portal (BOI24_portal)C++20
1 / 100
2094 ms3260 KiB
#include <bits/stdc++.h> // #define int long long #define pb push_back #define pii pair<int,int> #define f first #define s second #define all(x) x.begin(),x.end() using namespace std; const int N=1e5+5,A=1e6+5; int n,x[N],y[N]; int s[A],p[A]; void make_set(int v) { p[v]=v; s[v]=1; } int find_set(int v) { if (p[v]==v) return v; return p[v]=find_set(p[v]); } void merge_set(int a, int b) { a=find_set(a); b=find_set(b); if (a==b) return; if (s[a]<s[b]) swap(a,b); s[a]+=s[b]; p[b]=a; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; vector<pii> v; for (int i=1; i<=n; i++) cin>>x[i]>>y[i]; vector<int> xx,yy; for (int i=1; i<=n; i++) { v.pb({x[i],y[i]}); xx.pb(x[i]); yy.pb(y[i]); } sort(all(v)); sort(all(xx)); sort(all(yy)); bool check=true; int X=0,Y=0; for (int i=1; i<=n; i++) { for (int j=1; j<=n; j++) { X=__gcd(X,abs(x[i]-x[j])); Y=__gcd(Y,abs(y[i]-y[j])); } } if (X!=0 && Y!=0) { for (int i=2; i<n; i++) { if ((v[1].f-v[0].f)*(v[i].s-v[i-1].s)!=(v[1].s-v[0].s)*(v[i].f-v[i-1].f)) check=false; } } if (xx[0]==xx[n-1] || yy[0]==yy[n-1]) check=true; if (check) { cout<<-1<<endl; return 0; } cout<<X*Y<<endl; return 0; // sort(x+1,x+1+n); sort(y+1,y+1+n); int num=200; for (int i=0; i<=num; i++) { for (int j=0; j<=num; j++) { make_set(i+j*(num+1)); } } for (int i=0; i<=num; i++) { for (int j=0; j<=num; j++) { int num1=i+j*(num+1); // for (int ii=1; ii<=n; ii++) { // int jj=1; // int i1=i+x[ii]-x[jj]; // int j1=j+y[ii]-y[jj]; // int num2=i1+j1*(num+1); // if (0<=i1 && i1<=num && 0<=j1 && j1<=num) { // merge_set(num1,num2); // } // } for (int ii=1; ii<=n; ii++) { for (int jj=1; jj<=n; jj++) { int i1=i+x[ii]-x[jj]; int j1=j+y[ii]-y[jj]; int num2=i1+j1*(num+1); if (0<=i1 && i1<=num && 0<=j1 && j1<=num) { merge_set(num1,num2); } } } } } set<int> myset; for (int i=0; i<=num; i++) { for (int j=0; j<=num; j++) { myset.insert(find_set(i+j*(num+1))); } } cout<<myset.size()<<endl; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...