Submission #856351

#TimeUsernameProblemLanguageResultExecution timeMemory
856351vjudge1Sirni (COCI17_sirni)C++17
140 / 140
3065 ms396120 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 counter; 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; counter--; 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> //cerr<<"1\n"; 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}); int*last=p; for(int j=2;j*a[i]<=a[n-1];j++){ if(j*a[i]<=*last)continue; p=lower_bound(a,a+n,j*a[i]); if(p!=last&&p!=a+n)q.push({mody(a[i],*p),i,p-a}); last=p; } } } //cerr<<"2\n"; int ans=0; counter=n; while(q.size()&&counter!=1){ 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"; //cerr<<counter<<"\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...