제출 #1257972

#제출 시각아이디문제언어결과실행 시간메모리
1257972chikien2009Let's Win the Election (JOI22_ho_t3)C++20
10 / 100
0 ms328 KiB
#include <bits/stdc++.h> using namespace std; void setup() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } struct FENWICK_TREE { int num[501], tree[501]; inline void Update(int x, int v, int o) { while (x <= 500) { tree[x] += v * o; num[x] += o; x += (x & (~(x - 1))); } } inline int Get(int v) { int res = 0, x = 0; for (int i = 10; i >= 0; --i) { if (x + (1 << i) <= 500 && num[x + (1 << i)] <= v) { x += (1 << i); res += tree[x]; v -= num[x]; } } return res; } } ft; int n, m; double res = 0, sum; array<int, 3> p[500]; int main() { setup(); cin >> n >> m; for (int i = 0; i < n; ++i) { cin >> p[i][0] >> p[i][1]; p[i][1] = (p[i][1] == -1 ? 2000 : p[i][1]); } sort(p, p + n); for (int i = 0; i < n; ++i) { res += p[i][0] * (i < m); p[i][2] = i + 1; ft.Update(p[i][2], p[i][0], 1); swap(p[i][0], p[i][1]); } sort(p, p + n); for (int i = 0; i < m; ++i) { if (p[i][0] == 2000) { break; } sum += (double)p[i][0] / (i + 1); ft.Update(p[i][2], p[i][1], -1); res = min(res, sum + (double)ft.Get(m - i - 1) / (i + 2)); } cout << fixed << setprecision(6) << res; return 0; }
#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...