Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bits/stdc++.h"
- #define endl '\n'
- #define ll long long
- #define double long double
- using namespace std;
- const ll inf = 1000000000000000000;
- const ll mod = 998244353;
- ll n, x, a[100005], b[100005], kol21, kol6, kolnech, lef, rig, mid, ans, sum_begin_without_21;
- bool check(ll k2, ll k3) {
- // First stage
- ll sum = sum_begin_without_21;
- if (k3 <= kolnech) {
- kolnech -= k3;
- sum -= k3 * 3;
- ll twos_needed = (kol21 + (sum - kolnech) / 2 + kolnech);
- return (twos_needed <= k2);
- }
- sum -= kolnech * 3;
- k3 -= kolnech;
- kolnech = 0;
- // Second stage
- if (k3 <= kol6 * 2) {
- if (k3 % 2 == 1) {
- ll used_3 = k3 - 1;
- sum -= used_3 * 3;
- sum -= 3;
- kolnech = 1;
- ll twos_needed = (kol21 + (sum - kolnech) / 2 + kolnech);
- return (twos_needed <= k2);
- } else {
- sum -= k3 * 3;
- ll twos_needed = (kol21 + sum / 2);
- return (twos_needed <= k2);
- }
- }
- k3 -= kol6 * 2;
- sum -= kol6 * 6;
- return (kol21 + (sum / 2) <= k2 + k3);
- }
- int main() {
- freopen("input.txt", "r", stdin);
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- cin >> n >> x;
- for (ll i = 1; i <= n; ++i) {
- cin >> a[i];
- b[i] = a[i];
- if (a[i] <= 2) {
- ++kol21;
- } else {
- kolnech += (a[i] % 2);
- sum_begin_without_21 += a[i];
- }
- }
- for (ll i = 1; i <= n; ++i) {
- if (b[i] >= 3 && b[i] % 2 == 1) {
- b[i] -= 3;
- }
- kol6 += (b[i] / 6);
- }
- for (ll i = 0; i <= x; ++i) {
- if (check(i, 0)) {
- continue;
- }
- lef = 0;
- rig = 1000000000;
- while (rig - lef > 1) {
- mid = lef + (rig - lef) / 2;
- if (check(i, mid)) {
- rig = mid;
- } else {
- lef = mid;
- }
- }
- ans += rig;
- ans %= mod;
- }
- cout << ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement