제출 #891791

#제출 시각아이디문제언어결과실행 시간메모리
891791cumanSirni (COCI17_sirni)C++14
98 / 140
1403 ms786432 KiB
#include <bits/stdc++.h> using namespace std; #define all(v) v.begin(),v.end() using i64 = long long; #define rep(i,l,r) for (i64 i = (l); i <= (r); i++) struct DSU { vector<i64> e; void initSz(i64 n) { e = vector<i64>(n, -1); } i64 fr(i64 x) { return e[x] < 0 ? x : e[x] = fr(e[x]); } bool unite(i64 x, i64 y) { x = fr(x), y = fr(y); if (x==y) return false; if (e[x] > e[y]) swap(x,y); e[x] += e[y]; e[y] = x; return true; } }; void sub1(vector<i64> A) { sort(all(A)); A.erase(unique(all(A)), A.end()); i64 N = A.size(); vector<array<i64,3>> edges; rep(i, 0, N-1) { rep(j, i+1, N-1) { edges.push_back({A[j] % A[i], i, j}); } } DSU dsu; sort(all(edges)); dsu.initSz(N); long long res = 0; for (i64 i = 0; i < edges.size(); i++) { i64 w = edges[i][0]; i64 u = edges[i][1]; i64 v = edges[i][2]; if (dsu.unite(u, v)) res += w; } cout << res; } void sub2(vector<i64> A) { sort(all(A)); A.erase(unique(all(A)), A.end()); i64 N = A.size(); vector<array<i64,3>> edges; i64 MaxA = *max_element(all(A)); for (i64 i = 0; i < N; i++) { for (i64 mul = A[i]; mul <= MaxA; mul += A[i]) { i64 j = lower_bound(all(A), mul) - A.begin(); if (j == i) j++; if (j < N) { edges.push_back({A[j] % A[i], i, j}); } } } DSU dsu; sort(all(edges)); dsu.initSz(N); long long res = 0; for (i64 i = 0; i < edges.size(); i++) { i64 w = edges[i][0]; i64 u = edges[i][1]; i64 v = edges[i][2]; if (dsu.unite(u, v)) res += w; } cout << res; } signed main() { i64 N; cin >> N; vector<i64> A(N); for (i64& i : A) cin >> i; if (N <= 2e3) { sub1(A); } else { sub2(A); } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

sirni.cpp: In function 'void sub1(std::vector<long long int>)':
sirni.cpp:42:23: warning: comparison of integer expressions of different signedness: 'i64' {aka 'long long int'} and 'std::vector<std::array<long long int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |     for (i64 i = 0; i < edges.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~
sirni.cpp: In function 'void sub2(std::vector<long long int>)':
sirni.cpp:77:23: warning: comparison of integer expressions of different signedness: 'i64' {aka 'long long int'} and 'std::vector<std::array<long long int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |     for (i64 i = 0; i < edges.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...