Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <map>
- #include <set>
- #include <queue>
- #include <deque>
- #include <stack>
- #include <cmath>
- using namespace std;
- typedef long long ll;
- int a[100100];
- int dist[100100];
- int main()
- {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int T;
- cin >> T;
- for (int test_case = 1; test_case <= T; test_case++)
- {
- int N, L;
- cin >> N >> L;
- int left = N;
- for (int i = 0; i < L; i++)
- {
- cin >> a[i];
- left -= a[i];
- }
- vector<int> round_up_numbers;
- for (int k = 1; k < N; k++)
- {
- int round_down = (int)(100.0 * k / N);
- int round_up = (int)(100.0 * k / N + 0.5);
- if (round_up > round_down)
- round_up_numbers.push_back(k);
- }
- for (int k = 0; k < 100100; k++)
- {
- auto it = lower_bound(round_up_numbers.begin(), round_up_numbers.end(), k);
- dist[k] = it == round_up_numbers.end() ? 100100 : (*it - k);
- }
- sort(a, a + 100100, [](int l, int r)
- {
- if (dist[l] < dist[r])
- return true;
- if (dist[l] > dist[r])
- return false;
- return l < r;
- });
- int sum = 0;
- for (int i = 0; i < 100100; i++)
- {
- if (left >= dist[a[i]])
- {
- left -= dist[a[i]];
- a[i] += dist[a[i]];
- }
- if (a[i] > 0)
- sum += (int)(100.0 * a[i] / N + 0.5);
- }
- sum += (int)(100.0 * left / N + 0.5);
- cout << "Case #" << test_case << ": " << sum << '\n';
- for (int i = 0; i < 100100; i++) a[i] = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement