提出 #12423455


ソースコード 拡げる

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
#define bug(args ...) cerr << __LINE__ << ">> ", err(new istringstream(string(#args)), args), cerr << '\n'
#define all(x) x.begin(), x.end()
#define F first
#define S second
#define M_PI 3.14159265358979323846
#define MOD 998244353
#define int ll
typedef unsigned long long BITMASK; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<double, double> pdd; typedef pair<long long, long long> pll; typedef cc_hash_table<int, int, hash<int>> intHashTable;
struct custom_hash { static uint64_t splitmix64(uint64_t x) { x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >> 31); } size_t operator()(uint64_t x) const { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); return splitmix64(x + FIXED_RANDOM); } };
inline int powMod(int a, int b) { int x = 1; while (b > 0) { if (b&1) x = (x*a) % MOD; a = (a*a) % MOD; b >>= 1; } return x; }
inline int multiply(int x, int y) { return ((x % MOD) * (y % MOD)) % MOD; }
inline int divide(int x, int y) { return ((x % MOD) * powMod(y % MOD, MOD-2)) % MOD; }
inline int ceil(int a, int b) { return (a+b-1)/b; }
int gcd (int a, int b) { while (b) { a %= b; swap(a, b); } return a; }
int lcm (int a, int b) { return a / gcd(a, b) * b; }
int inverseMod(int a, int m) { a = a % m; for (ll x = 1; x < m; x++) if ((a * x) % m == 1) return x; return -1; }
void err(istringstream *iss) {} template<typename T, typename ... Args> void err(istringstream *iss, const T &_val, const Args & ... args) { string _name; *iss >> _name; if (_name.back()==',') _name.pop_back(); cerr << _name << " = " << _val << "; ", err(iss, args ...); }
int str_replace(string& str, const string& from, const string& to, int limit = -1) { if(from.empty()) return 0; size_t start_pos = 0; int cnt = 0; while((start_pos = str.find(from, start_pos)) != std::string::npos) { str.replace(start_pos, from.length(), to); start_pos += to.length(); cnt++; if (cnt == limit) break; } return cnt; }
template<int D, typename T> struct vec : public vector<vec<D - 1, T>> { static_assert(D >= 1, "Vector dimension must be greater than zero!");  template<typename... Args> vec(int n = 0, Args... args) : vector<vec<D - 1, T>>(n, vec<D - 1, T>(args...)) { } }; template<typename T> struct vec<1, T> : public vector<T> { vec(int n = 0, T val = T()) : vector<T>(n, val) { }};

signed main()
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int n, s; cin >> n >> s;
    vec<1, int> arr(n+1);
    for (int i = 1; i <= n; ++i) cin >> arr[i];
    vec<2, int> DP(n+1, s+1, 0);
    vec<1, int> pref(s+1, 0);
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= s; ++j)
        {
            if (j == arr[i]) DP[i][j] = i;
            else if (j > arr[i]) DP[i][j] = pref[j-arr[i]] % MOD;
            else DP[i][j] = 0;
        }
        for (int j = 1; j <= s; ++j) pref[j] += DP[i][j];
    }
    
    int ans = 0;
    for (int i = 1; i <= n; ++i) (ans += multiply(n-i+1, DP[i][s])) %= MOD;
    cout << ans << '\n';
    return 0;
}

提出情報

提出日時
問題 F - Knapsack for All Segments
ユーザ ankit_priyarup
言語 C++14 (GCC 5.4.1)
得点 600
コード長 3530 Byte
結果 AC
実行時間 105 ms
メモリ 70784 KiB

ジャッジ結果

セット名 sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 3
AC × 23
セット名 テストケース
sample sample01, sample02, sample03
All 11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 31, 32, 33, 34, 35, 41, 42, 43, 44, 45, sample01, sample02, sample03
ケース名 結果 実行時間 メモリ
11 AC 1 ms 384 KiB
12 AC 1 ms 640 KiB
13 AC 2 ms 768 KiB
14 AC 1 ms 384 KiB
15 AC 1 ms 256 KiB
21 AC 5 ms 3072 KiB
22 AC 45 ms 32000 KiB
23 AC 35 ms 25344 KiB
24 AC 47 ms 34816 KiB
25 AC 8 ms 5760 KiB
31 AC 39 ms 25728 KiB
32 AC 53 ms 34944 KiB
33 AC 50 ms 32512 KiB
34 AC 51 ms 33536 KiB
35 AC 52 ms 33536 KiB
41 AC 104 ms 70784 KiB
42 AC 105 ms 70784 KiB
43 AC 105 ms 70784 KiB
44 AC 105 ms 70784 KiB
45 AC 105 ms 70784 KiB
sample01 AC 1 ms 256 KiB
sample02 AC 1 ms 256 KiB
sample03 AC 1 ms 256 KiB