제출 #248114

#제출 시각아이디문제언어결과실행 시간메모리
248114kartelSirni (COCI17_sirni)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> #define in(x) freopen(x, "r", stdin) #define out(x) freopen(x, "w", stdout) #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-O3") #define F first #define S second #define pb push_back #define N +100500 #define M ll(1e9 + 7) #define sz(x) (int)x.size() #define re return #define oo ll(1e9) #define el '\n' //#define el endl #define pii pair <int, int> #define err ld(1e-9) #define last(x) x.back() #define all(x) (x).begin(), (x).end() #define arr_all(x, n) (x + 1), (x + 1 + n) using namespace std; //using namespace __gnu_pbds; //typedef tree <int, null_type, less_equal <int> , rb_tree_tag, tree_order_statistics_node_update> ordered_set; typedef long long ll; typedef long double ld; int pr[N], ra[N], i, j, n, p[N], ost, x, y; ll ans; vector <pair <int, pair <int, int> > > g; vector <int> P[1e7 + 50]; int f(int x) { if (pr[x] != x) return (pr[x] = f(pr[x])); return x; } void link(int x, int y) { x = f(x); y = f(y); if (x == y) return; if (ra[x] > ra[y]) pr[x] = y; else { pr[y] = x; if (ra[x] == ra[y]) ra[y]++; } } int main() { srand(time(0)); ios_base::sync_with_stdio(0); iostream::sync_with_stdio(0); ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); // // in("input.txt"); // out("output.txt"); cin >> n; for (i = 1; i <= n; i++) cin >> p[i], pr[i] = i, ra[i] = 1; if (n <= 1000) { for (i = 1; i <= n; i++) for (j = i + 1; j <= n; j++) { int a = max(p[i], p[j]); int b = min(p[i], p[j]); g.pb({a % b, {i, j}}); } sort(all(g)); reverse(all(g)); while (sz(g)) { int a = g.back().S.F, b = g.back().S.S; int cost = g.back().F; g.pop_back(); if (f(a) != f(b)) { ans += cost; link(a, b); } } } else { for (i = 1; i <= n; i++) P[p[i]].pb(i); for (ost = 0; ost <= 30; ost++) for (x = ost + 1; x <= 1000000; x++) { if (!sz(P[x])) continue; for (y = x; y <= 1000000; y += x) { if (y + ost != x && !sz(P[y + ost])) continue; for (auto a : P[y + ost]) if (f(a) != f(P[x][0])) link(a, P[x][0]), ans += ost; } } } cout << ans; } // //00000 //00110 //00111 //00011 //00000

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

sirni.cpp:33:24: error: size of array 'P' has non-integral type 'double'
 vector <int> P[1e7 + 50];
                        ^