제출 #856347

#제출 시각아이디문제언어결과실행 시간메모리
856347vjudge1Sirni (COCI17_sirni)C++17
84 / 140
2197 ms786432 KiB
#ifndef Local #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #endif #include <bits/stdc++.h> #define int long long #define pb push_back #define lim 100000 using namespace std; const int mod=1000000007ll; int parent[lim]; int find(int i){ if(parent[i]==i)return i; return parent[i]=find(parent[i]); } bool unite(int i,int j){ int x=find(i),y=find(j); if(x!=y){ parent[x]=y; return 1; } return 0; } int mody(int i,int j){ return max(i,j)%min(i,j); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); #ifdef Local freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int n; cin>>n; int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; } sort(a,a+n); n=unique(a,a+n)-a; for(int i=0;i<n;i++)parent[i]=i; #define tup tuple<int,int,int> priority_queue<tup,vector<tup>,greater<tup>>q; for(int i=0;i<n-1;i++){ int*p=upper_bound(a,a+n,a[i]); if(p!=a+n)q.push({mody(a[i],*p),i,p-a}); for(int j=2;j*a[i]<=a[n-1];j++){ p=lower_bound(a,a+n,j*a[i]); if(p!=a+n)q.push({mody(a[i],*p),i,p-a}); } } int ans=0; while(q.size()){ auto [cost,i,j]=q.top(); q.pop(); if(unite(i,j)){ //cerr<<a[i]<<" "<<a[j]<<"\n"; ans+=cost; }//else cerr<<"didnt "<<a[i]<<" "<<a[j]<<"\n"; } cout<<ans<<"\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...