Submission #949215

#TimeUsernameProblemLanguageResultExecution timeMemory
949215vjudge1Sirni (COCI17_sirni)C++17
42 / 140
63 ms14536 KiB
#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
 
using namespace std;
using namespace __gnu_pbds; 
 
#define int long long
#define ff first
#define ss second
#define rep(i,s,f) for(int i = s;i < f;i++)
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pb push_back
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> 
#define ordered_multiset tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> 

const int INF = 1e18,N = 1e3 + 1;
const int prime = 31,m = 1e9 + 9,MOD7 = 1e9 + 7;

int binpow(int n,int k){	
	if(k == 0){
		return 1 ;
	} else if(k % 2 == 0){
		int b = binpow(n,k / 2);
		return b * b ;
	} else{
		return n * binpow(n,k - 1) ;
	}

}

int p[N];
int sz[N];

int find(int n){
	if(p[n] == n){
		return n;
	}
	return p[n] = find(p[n]);
}

void unin(int a,int b){
	
	a = find(a);
	b = find(b);
	if(sz[a] > sz[b]){
		swap(a,b);
	}
	sz[b] += sz[a];
	p[a] = b;
	
}

void solve(){
	
	int n;
	cin >> n;
	int a[n];
	for(int i = 0;i < n;i++){
		p[i] = i;
		sz[i] = 1;
		cin >> a[i];
	}
	if(n <= 1000){
		vector<tuple<int,int,int>> g;
		for(int i = 0;i < n;i++){
			for(int j = i + 1;j < n;j++){
				int mn = a[i] % a[j];
				mn = min(mn,a[j] % a[i]);
				g.pb({mn,i,j});
			}
		}
		sort(all(g));
		int sum = 0;
		for(auto [cost,a,b] : g){
			if(find(a) != find(b)){
				unin(a,b);
				sum += cost;
			}
		}
		cout << sum;
	}
	
}

signed main(){
	
	ios_base::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	
	int t = 1;
	//~ cin >> t;
	while(t--){
		solve();
	}
	
}
	
#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...