#include<iostream>
#include<algorithm>
#include<vector>
#define f first
#define s second
#define DIM 100005
using namespace std;
int n, i, j, r1, r2, p, u, mid;
long long sol;
int v[DIM], r[DIM];
vector< pair<int, int> > w;
int cmp(pair<int, int> a, pair<int, int> b){
return v[a.f] % v[a.s] < v[b.f] % v[b.s];
}
int rad(int x){
int y = x;
while(r[y] > 0){
y = r[y];
}
while(r[x] > 0){
int aux = r[x];
r[x] = y;
x = aux;
}
return x;
}
int main(){
cin>> n;
for(i = 1; i <= n; i++){
cin>> v[i];
}
sort(v + 1, v + n + 1);
p = 1;
for(i = 2; i <= n; i++){
if(v[i] != v[p]){
v[++p] = v[i];
}
}
if(v[1] == 1){
cout<< 0;
return 0;
}
n = p;
for(i = 1; i < n; i++){
if(v[i + 1] < 2 * v[i]){
w.push_back( make_pair(i + 1, i) );
}
}
for(i = 1; i < n; i++){
p = i + 1;
for(j = v[i] + v[i]; j <= v[n]; j += v[i]){
if(v[p] >= j + v[i]){
continue;
}
u = n;
while(p <= u){
mid = (p + u) / 2;
if(v[mid] >= j){
u = mid - 1;
}
else{
p = mid + 1;
}
}
if(v[p] < j + v[i]){
w.push_back( make_pair(p, i) );
p++;
}
}
}
sort(w.begin(), w.end(), cmp);
for(i = 1; i <= n; i++){
r[i] = -1;
}
for(i = 0; i < w.size(); i++){
r1 = rad(w[i].f);
r2 = rad(w[i].s);
if(r1 != r2){
sol += v[ w[i].f ] % v[ w[i].s ];
if(r[r1] < r[r2]){
r[r1] += r[r2];
r[r2] = r1;
}
else{
r[r2] += r[r1];
r[r1] = r2;
}
}
}
cout<< sol;
}
Compilation message
sirni.cpp: In function 'int main()':
sirni.cpp:75:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i = 0; i < w.size(); i++){
~~^~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
504 KB |
Output is correct |
2 |
Correct |
74 ms |
2540 KB |
Output is correct |
3 |
Correct |
7 ms |
504 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
376 KB |
Output is correct |
2 |
Correct |
146 ms |
1012 KB |
Output is correct |
3 |
Correct |
7 ms |
504 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
376 KB |
Output is correct |
2 |
Correct |
3 ms |
380 KB |
Output is correct |
3 |
Correct |
6 ms |
504 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
422 ms |
9332 KB |
Output is correct |
2 |
Correct |
1470 ms |
33892 KB |
Output is correct |
3 |
Correct |
580 ms |
17476 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
60 ms |
2668 KB |
Output is correct |
2 |
Correct |
851 ms |
33888 KB |
Output is correct |
3 |
Correct |
411 ms |
9532 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
921 ms |
33956 KB |
Output is correct |
2 |
Correct |
1896 ms |
66712 KB |
Output is correct |
3 |
Correct |
536 ms |
17488 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
136 ms |
4924 KB |
Output is correct |
2 |
Correct |
1815 ms |
66860 KB |
Output is correct |
3 |
Correct |
513 ms |
17372 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
557 ms |
17568 KB |
Output is correct |
2 |
Execution timed out |
5080 ms |
263824 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
542 ms |
17452 KB |
Output is correct |
2 |
Execution timed out |
5098 ms |
263852 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
85 ms |
2668 KB |
Output is correct |
2 |
Execution timed out |
5095 ms |
263756 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |