Submission #126466

#TimeUsernameProblemLanguageResultExecution timeMemory
126466letrongdatSirni (COCI17_sirni)C++17
112 / 140
5143 ms574368 KiB
#include <bits/stdc++.h> using namespace std; #define forn(i, a, b) for(int i=a; i<=b; ++i) #define ford(i, a ,b) for(int i=a; i>=b; --i) #define repn(i, a, b) for(int i=a; i <b; ++i) typedef pair<int, int> ii; const int maxM = 1e7+ 10; const int maxN = 1e5 +10; int N; int Near[maxM]; int lab[maxN]; vector<int> P; vector<ii> Edge[maxM]; int root(int u) { if (lab[u] < 0) return u; return lab[u] = root(lab[u]); } void join(int u, int v) { int l1 = root(u), l2 = root(v); if (lab[l1] > lab[l2]) swap(l1, l2); lab[l1] += lab[l2]; lab[l2] = l1; } int main() { // #ifndef ONLINE_JUDGE // freopen("a.inp", "r", stdin); // #endif // ONLINE_JUDGE ios::sync_with_stdio(0); memset(lab, -1, sizeof lab); cin >> N; P.resize(N); repn(i, 0, N) cin >> P[i]; sort(P.begin(), P.end()); P.resize(unique(P.begin(), P.end()) - P.begin()); memset(Near, 0x3f, sizeof Near); repn(i, 0, P.size()) Near[P[i]] = i; ford(i, P.back(), 0) Near[i] = min(Near[i], Near[i+1]); repn(i, 0, P.size() -1) { int weight = P[Near[P[i]+1]] - P[i]; if (weight < P[i]) Edge[weight].push_back({i, Near[P[i]+1]}); for(int j = 2*P[i]; j <= P.back(); j += P[i]) { int weight = P[Near[j]] - j; if (weight < P[i]) Edge[weight].push_back({i, Near[j]}); } } long long result = 0; repn(i, 0, maxM) { for(auto &e: Edge[i]) if (root(e.first) == root(e.second)) continue; else { result += i; join(e.first, e.second); } } cout << result; }

Compilation message (stderr)

sirni.cpp: In function 'int main()':
sirni.cpp:5:52: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define repn(i, a, b)               for(int i=a; i <b; ++i)
sirni.cpp:36:10:
     repn(i, 0, P.size()) Near[P[i]] = i;
          ~~~~~~~~~~~~~~                             
sirni.cpp:36:5: note: in expansion of macro 'repn'
     repn(i, 0, P.size()) Near[P[i]] = i;
     ^~~~
sirni.cpp:5:52: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define repn(i, a, b)               for(int i=a; i <b; ++i)
sirni.cpp:38:10:
     repn(i, 0, P.size() -1) {
          ~~~~~~~~~~~~~~~~~                          
sirni.cpp:38:5: note: in expansion of macro 'repn'
     repn(i, 0, P.size() -1) {
     ^~~~
#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...