提出 #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;
}
提出情報
ジャッジ結果
| セット名 |
sample |
All |
| 得点 / 配点 |
0 / 0 |
600 / 600 |
| 結果 |
|
|
| セット名 |
テストケース |
| 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 |