結果
問題 | No.393 2本の竹 |
ユーザー |
![]() |
提出日時 | 2016-07-12 19:02:23 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 1,000 ms |
コード長 | 1,625 bytes |
コンパイル時間 | 1,404 ms |
コンパイル使用メモリ | 97,604 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-08 05:41:58 |
合計ジャッジ時間 | 2,219 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 28 |
ソースコード
#pragma GCC optimize ("O3")#pragma GCC target ("avx") // yukicoder// #pragma GCC target ("sse4") // SPOJ, codechef#include <cstdio>#include <cassert>#include <cmath>#include <cstring>#include <complex>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <set>#include <functional>#include <tuple>#define _rep(_1, _2, _3, _4, name, ...) name#define rep2(i, n) rep3(i, 0, n)#define rep3(i, a, b) rep4(i, a, b, 1)#define rep4(i, a, b, c) for (int i = int(a); i < int(b); i += int(c))#define rep(...) _rep(__VA_ARGS__, rep4, rep3, rep2, _)(__VA_ARGS__)using namespace std;using i8 = signed char;using i64 = long long;using u8 = unsigned char;using u32 = unsigned;using u64 = unsigned long long;using f80 = long double;int A[100];i8 dp[100010];void solve() {int T; scanf("%d", &T);rep(_, T) {int n1, n2; scanf("%d %d", &n1, &n2);int m; scanf("%d", &m);rep(i, m) scanf("%d", &A[i]);sort(A, A + m);if (n1 < n2) swap(n1, n2);const i8 inf = 100;fill(dp, dp + n1 + 1, inf);dp[0] = 0;int s = 0, ans = 0;rep(t, m) {int v = A[t];s += v;if (s > n1 + n2) break;for (int i = min(n1, s); i >= v; --i) {dp[i] = min(dp[i], i8(dp[i - v] + 1));}for (int i = min(n1, s); i >= v; --i) {if (dp[i] < inf) {ans += (s - i) <= n2;break;}}}printf("%d\n", ans);}}int main() {clock_t beg = clock();solve();clock_t end = clock();fprintf(stderr, "%.3f sec\n", double(end - beg) / CLOCKS_PER_SEC);return 0;}