Submission #152337

#TimeUsernameProblemLanguageResultExecution timeMemory
152337alexandra_udristoiuSirni (COCI17_sirni)C++14
140 / 140
3260 ms246952 KiB
#include<iostream> #include<algorithm> #include<vector> #define DIM 100005 using namespace std; int n, i, j, r1, r2, p; long long sol; int v[DIM], r[DIM], nxt[10000005]; char viz[10000005]; struct str{ int f, s, c; }; vector<str> w; int cmp(str a, str b){ return a.c < b.c; } 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++){ nxt[ v[i] ] = i; } for(i = v[n]; i >= v[1]; i--){ if(nxt[i] == 0){ nxt[i] = nxt[i + 1]; } } for(i = 1; i < n; i++){ if(v[i + 1] < 2 * v[i]){ w.push_back( {i + 1, i, v[i + 1] % v[i]} ); } } for(i = 1; i < n; i++){ if(viz[ v[i] ] == 1){ continue; } p = i + 1; for(j = v[i] + v[i]; j <= v[n]; j += v[i]){ viz[j] = 1; p = nxt[j]; if(v[p] < j + v[i]){ w.push_back( {p, i, v[p] % v[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 += w[i].c; if(r[r1] < r[r2]){ r[r1] += r[r2]; r[r2] = r1; } else{ r[r2] += r[r1]; r[r1] = r2; } } } cout<< sol; }

Compilation message (stderr)

sirni.cpp: In function 'int main()':
sirni.cpp:77:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i = 0; i < w.size(); i++){
                ~~^~~~~~~~~~
#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...