Submission #1028768

#TimeUsernameProblemLanguageResultExecution timeMemory
1028768isaachewPortal (BOI24_portal)C++17
100 / 100
22 ms1884 KiB
#include <bits/stdc++.h> /* Have a tiling that can be translated by any amount */ long long gcd(long long a,long long b){ while(a!=0&&b!=0){ a%=b; std::swap(a,b); } return a+b; } std::pair<int,int> getmuls(int a,int b){//extended Euclidean algorithm int aina=1,ainb=0,bina=0,binb=1; while(a!=0&&b!=0){ int adb=a/b; aina-=adb*ainb; bina-=adb*binb; a=a%b; if(a==0)break; int bda=b/a; ainb-=bda*aina; binb-=bda*bina; b=b%a; } return {aina+ainb,bina+binb}; } int main(){ std::ios::sync_with_stdio(0); std::cin.tie(0); int n; std::cin>>n; long long ia,ib; std::cin>>ia>>ib; long long xrep=0,yrep=0,yoff=0; for(int i=1;i<n;i++){ long long a,b; std::cin>>a>>b; a-=ia,b-=ib; if(b==0&&yrep==0){//division by 0 xrep=gcd(a,xrep); }else{ std::pair<int,int> nums=getmuls(b,yrep); long long ngcd=nums.first*b+nums.second*yrep; long long nxrep=std::abs((a*yrep-yoff*b)/ngcd); xrep=gcd(xrep,nxrep); yoff=nums.first*a+nums.second*yoff; yrep=ngcd; if(xrep!=0)yoff%=xrep; } } long long result=std::abs(xrep*yrep); std::cout<<(result==0?-1:result)<<'\n'; }
#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...