結果
問題 | No.1861 Required Number |
ユーザー |
![]() |
提出日時 | 2022-03-04 21:52:59 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 85 ms / 2,500 ms |
コード長 | 3,115 bytes |
コンパイル時間 | 2,363 ms |
コンパイル使用メモリ | 207,660 KB |
最終ジャッジ日時 | 2025-01-28 05:11:28 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 42 MLE * 4 |
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;#define rep(i, n) for (int i = 0; i < n; i++)#define all(v) v.begin(), v.end()template <class T, class U>inline bool chmax(T& a, U b) {if (a < b) {a = b;return true;}return false;}template <class T, class U>inline bool chmin(T& a, U b) {if (a > b) {a = b;return true;}return false;}constexpr int INF = 1000000000;constexpr ll llINF = 3000000000000000000;constexpr int mod = 998244353;const ll half = (mod + 1) / 2;constexpr double eps = 1e-10;vector<int> prime_list(int n) {vector<int> v(n + 1), res;for (int i = n; i >= 2; i--) {for (int j = i; j <= n; j += i) v[j] = i;}for (int i = 2; i <= n; i++) {if (v[i] == i) res.push_back(i);}return res;}vector<int> next_divisor(int n) {vector<int> v(n + 1);for (int i = n; i >= 2; i--) {for (int j = i; j <= n; j += i) v[j] = i;}return v;}ll modpow(ll a, ll b, ll m = mod) {ll res = 1;while (b) {if (b & 1) {res *= a;res %= m;}a *= a;a %= m;b >>= 1;}return res;}vector<ll> inv, fact, factinv;void init_fact(int n) {inv.resize(n + 1);fact.resize(n + 1);factinv.resize(n + 1);inv[0] = 0;inv[1] = 1;fact[0] = 1;factinv[0] = 1;for (ll i = 1; i <= n; i++) {if (i >= 2) inv[i] = mod - ((mod / i) * inv[mod % i] % mod);fact[i] = (fact[i - 1] * i) % mod;factinv[i] = factinv[i - 1] * inv[i] % mod;}}ll modinv(ll a, ll m = mod) {// gcd(a,m) must be 1ll b = m, u = 1, v = 0;while (b) {ll t = a / b;a -= t * b;swap(a, b);u -= t * v;swap(u, v);}u %= m;if (u < 0) u += m;return u;}ll comb(int a, int b) {if (a < b || a < 0 || b < 0) return 0;return fact[a] * factinv[a - b] % mod * factinv[b] % mod;}void solve() {int n, k;cin >> n >> k;vector<int> a(n);rep(i, n) cin >> a[i];vector<vector<bool>> l(n + 1, vector<bool>(k + 1));vector<vector<bool>> r(n + 1, vector<bool>(k + 1));l[0][0] = true;rep(i, n) {rep(j, k + 1) {if (l[i][j]) {l[i + 1][j] = true;if (j + a[i] <= k) l[i + 1][j + a[i]] = true;}}}r[n][0] = true;for (int i = n - 1; i >= 0; i--) {rep(j, k + 1) {if (r[i + 1][j]) {r[i][j] = true;if (j + a[i] <= k) r[i][j + a[i]] = true;}}}if (l[n][k] == false) {cout << -1 << endl;return;}int ans = 0;rep(i, n) {//[0,i)//[i+1,n)bool ok = true;rep(j, k + 1) {if (l[i][j] && r[i + 1][k - j]) ok = false;}if (ok) ans++;}cout << ans << endl;}int main() {cin.tie(0);ios::sync_with_stdio(false);/*int t;cin >> t;while (t--)*/solve();}