Submission #74715276


Source Code Expand

#include<bits/extc++.h>

#pragma GCC optimize("O3","unroll-loops")
#pragma GCC target("avx,avx2")

#include<iostream>
#include<queue>
#include<vector>
#include<cmath>
#include<map>

using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;

typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;

#define coutc "\033[48;5;196m\033[38;5;15m"
#define endc "\033[0m"
#define M(_1, _2, _3, _4, NAME, ...) NAME
#define rep(...) \
  M(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define rep4(_, x, n, s) \
  for (int _ = x; (s < 0) ? _ > n : _ < n; _ += s)
#define rep3(_, x, n) rep4(_, x, n, (x < n ? 1 : -1))
#define rep2(_, n) rep3(_, 0, n)
#define rep1(n) rep2(i, n)

#define FOR(i, a, b) for (int i=a; i<b; i++)
#define F0R(i, a) for (int i=0; i<a; i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) a*b/gcd(a,b)

#define mp make_pair
// #define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define endl "\n"

// #define cin fin
// #define cout fout

// ifstream fin("word.in");
// ofstream fout("word.out");

const int inf = INT_MAX;
const int MOD = 998244353;
double PI = 4*atan(1);

#ifdef DEBUG
string to_string(char c) { return string({c}); }
// 7
template<class... Ts>
ostream& operator<<(ostream& o, tuple<Ts...> t) {
  string s = "(";
  apply([&](auto&&... r) {
    ((s += to_string(r) + ", "), ...); }, t);
  return o << s.substr(0, len(s) - 2) + ")";
}
// 3
ostream& operator<<(ostream &o, pair<auto, auto> p) {
  return o << "(" << p.fi << ", " << p.se << ")";
}
// 7
template<class C, class T = typename C::value_type,
typename std::enable_if<!std::is_same<C, std::string>
::value>::type* = nullptr>
ostream& operator<<(ostream &o, C c) {
  for (auto e : c) o << setw(7) << right << e;
  return o << endc << endl << coutc;
}
// 7
void debug(const auto &e, const auto &... r) {
  cout << coutc << e;
  ((cout << " " << r), ..., (cout << endc << endl));
}
#else
#define debug(...)
#endif

map<string,int> mon;
map<int,string> inp;

ll fac[105], ifac[105];

ll qp(ll a, ll e) {
    ll r = 1;
    while (e) {
        if (e & 1) r = r*a%MOD;
        a = a*a%MOD;
        e >>= 1;
    }
    return r;
}

void init() {
    static bool ok = 0;
    if (ok) return;
    ok = 1;
    fac[0] = ifac[0] = 1;
    int i = 1;
    while (i <= 100) {
        fac[i] = fac[i - 1]*i%MOD;
        i++;
    }
    i = 1;
    while (i <= 100) {
        ifac[i] = qp(fac[i], MOD - 2);
        i++;
    }
}

void _main(int tc) {
    init();

    int N;
    ll C;
    cin >> N >> C;
    vi a(N);
    int i = 0;
    while (i < N) cin >> a[i], i++;
    sort(a.begin(), a.end());

    vector<ll> ge(N + 2);
    ge[0] = 1;

    ll invc = qp(C, MOD - 2);
    ll invcn = qp(invc, N);

    int k = 1;
    while (k <= N) {
        vi d;
        d.push_back(a[0] - 1);

        i = 0;
        while (i + 1 < k) {
            d.push_back(a[i + 1] - a[i]);
            i++;
        }
        d.push_back((int)(C - a[k - 1] + 1));

        vector<ll> dp(N + 1), ndp(N + 1);
        dp[0] = 1;

        i = 0;
        while (i <= k) {
            fill(ndp.begin(), ndp.end(), 0);

            int t = 0;
            while (t <= N) {
                if (dp[t]) {
                    int mx = N - t;
                    if (i < k) mx = min(mx, N - k + i - t);

                    if (mx >= 0) {
                        ll pw = 1;
                        int x = 0;
                        while (x <= mx) {
                            ndp[t + x] = (ndp[t + x] + dp[t]*pw%MOD*ifac[x])%MOD;
                            pw = pw*d[i]%MOD;
                            x++;
                        }
                    }
                }
                t++;
            }

            dp.swap(ndp);
            i++;
        }

        ge[k] = dp[N]*fac[N]%MOD*invcn%MOD;
        k++;
    }

    vector<ll> ans(N + 1);
    k = 0;
    while (k < N) {
        ans[k] = (ge[k] - ge[k + 1] + MOD)%MOD;
        k++;
    }
    ans[N] = ge[N];

    i = 0;
    while (i <= N) {
        if (i) cout << ' ';
        cout << ans[i];
        i++;
    }
    cout << endl;
}
// 5
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  int tc; cin >> tc; rep(i, tc) _main(i + 1);
}

Submission Info

Submission Time
Task C - Greedy Customers 2
User zaahir
Language C++23 (GCC 15.2.0)
Score 700
Code Size 4653 Byte
Status AC
Exec Time 52 ms
Memory 3672 KiB

Compile Error

./Main.cpp: In function 'void _main(int)':
./Main.cpp:121:16: warning: unused parameter 'tc' [-Wunused-parameter]
  121 | void _main(int tc) {
      |            ~~~~^~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 1
AC × 27
Set Name Test Cases
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_handmade_00.txt, 01_handmade_01.txt, 01_handmade_02.txt, 01_handmade_03.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 02_random_11.txt, 02_random_12.txt, 02_random_13.txt, 02_random_14.txt, 02_random_15.txt, 02_random_16.txt, 02_random_17.txt, 02_random_18.txt, 02_random_19.txt, 02_random_20.txt, 02_random_21.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3544 KiB
01_handmade_00.txt AC 36 ms 3632 KiB
01_handmade_01.txt AC 36 ms 3556 KiB
01_handmade_02.txt AC 52 ms 3532 KiB
01_handmade_03.txt AC 1 ms 3632 KiB
02_random_00.txt AC 1 ms 3672 KiB
02_random_01.txt AC 1 ms 3648 KiB
02_random_02.txt AC 52 ms 3468 KiB
02_random_03.txt AC 52 ms 3428 KiB
02_random_04.txt AC 52 ms 3420 KiB
02_random_05.txt AC 52 ms 3468 KiB
02_random_06.txt AC 52 ms 3428 KiB
02_random_07.txt AC 52 ms 3548 KiB
02_random_08.txt AC 52 ms 3548 KiB
02_random_09.txt AC 52 ms 3420 KiB
02_random_10.txt AC 52 ms 3644 KiB
02_random_11.txt AC 52 ms 3512 KiB
02_random_12.txt AC 52 ms 3544 KiB
02_random_13.txt AC 52 ms 3420 KiB
02_random_14.txt AC 52 ms 3648 KiB
02_random_15.txt AC 52 ms 3632 KiB
02_random_16.txt AC 52 ms 3420 KiB
02_random_17.txt AC 36 ms 3556 KiB
02_random_18.txt AC 52 ms 3568 KiB
02_random_19.txt AC 52 ms 3548 KiB
02_random_20.txt AC 52 ms 3632 KiB
02_random_21.txt AC 52 ms 3568 KiB