Submission #65690154


Source Code Expand

#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using mint = modint1000000007;
// using mint = modint998244353;

/* alias*/
using ull = unsigned long long;
using ll = long long;
using vi = vector<int>;
using vl = vector<ll>;
using vd = vector<double>;
using vs = vector<string>;
using vb = vector<bool>;
using vvi = vector<vi>;
using vvl = vector<vl>;
using vvd = vector<vd>;
using vvs = vector<vs>;
using vvb = vector<vb>;
using vvvi = vector<vvi>;
using vvvl = vector<vvl>;
using vvvd = vector<vvd>;
using vvvs = vector<vvs>;
using vvvb = vector<vvb>;
using vvvvl = vector<vvvl>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using psl = pair<string, ll>;
using vpii = vector<pii>;
using vpll = vector<pll>;
using vpsl = vector<psl>;
using ql = queue<ll>;
using qpll = queue<pll>;
using qpsl = queue<psl>;
using tlll = tuple<ll, ll, ll>;
using tsll = tuple<string, ll, ll>;
using vtlll = vector<tlll>;
using vtsll = vector<tsll>;
using qtlll = queue<tlll>;
using qtsll = queue<tsll>;
using si = set<int>;
using sl = set<ll>;
using sd = set<double>;
using ss = set<string>;
using usi = unordered_set<int>;
using usl = unordered_set<ll>;
using usd = unordered_set<double>;
using uss = unordered_set<string>;
using mii = map<int, int>;
using mll = map<ll, ll>;
using msl = map<string, ll>;
using mls = map<ll, string>;
using umii = unordered_map<int, int>;
using umll = unordered_map<ll, ll>;
using umsl = unordered_map<string, ll>;

using umls = unordered_map<ll, string>;
/* const */
const int INF = INT_MAX / 2;
const ll LINF = 1LL << 60;
const int dx4[]{1, 0, -1, 0, 0};
const int dy4[]{0, 1, 0, -1, 0};
const int dx8[]{1, 1, 0, -1, -1, -1, 0, 1, 0};
const int dy8[]{0, 1, 1, 1, 0, -1, -1, -1, 0};
const char PASSAGE = '.';
const char WALL = '#';
const double PI = 3.1415926535;
const string YES = "Yes";
const string NO = "No";
const ll MOD = 1e5;
// const int MOD = 998244353;

/* define short */
#define _overload5(a, b, c, d, e, name, ...) name
#define _overload4(a, b, c, d, name, ...) name
#define _overload3(a, b, c, name, ...) name
#define _rep0(n) for (ll i = 0; i < (ll)(n); ++i)
#define _rep1(i, n) for (ll i = 0; i < (ll)(n); ++i)
#define _rep2(i, a, b) for (ll i = (ll)(a); i < (ll)(b); ++i)
#define _rep3(i, a, b, c) for (ll i = (ll)(a); i < (ll)(b); i += (ll)(c))
#define rep(...) _overload4(__VA_ARGS__, _rep3, _rep2, _rep1, _rep0)(__VA_ARGS__)
#define rrep1(n) for (ll i = (n) - 1; i >= 0; i--)
#define rrep2(i, n) for (ll i = (n) - 1; i >= 0; i--)
#define rrep3(i, a, b) for (ll i = (b) - 1; i >= (a); i--)
#define rrep4(i, a, b, c) for (ll i = (a) + ((b) - (a) - 1) / (c) * (c); i >= (a); i -= c)
#define rrep(...) _overload4(__VA_ARGS__, rrep4, rrep3, rrep2, rrep1)(__VA_ARGS__)
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define join(a, b) a.insert(a.end(), ALL(b))
#define vsort(a) sort(all(a))
#define sz(x) (ll)(x).size()
#define pcnt(x) __builtin_popcountll(x)
#define eb emplace_back
#define fi first
#define se second
#define yesno(a, b) auto a = b ? YES : NO

/* debug */
// 標準エラー出力を含む提出はrejectされる場合もあるので注意
#define debug(x) cerr << "\033[33m(line:" << __LINE__ << ") " << #x << ": " << x << "\033[m" << endl;

/* func */
template <class T>
inline bool chmax(T &a, T b) { return ((a < b) ? (a = b, true) : (false)); }
template <class T>
inline bool chmin(T &a, T b) { return ((a > b) ? (a = b, true) : (false)); }
inline void yes() { cout << YES << endl; }
inline void no() { cout << NO << endl; }
template <class T>
inline void out(T a) { cout << a << endl; }
template <class T>
inline void vout(T a, bool b)
{
    rep(i, sz(a))
    {
        cout << a[i];
        b ? cout << " " : cout << endl;
    }
    if (b)
        cout << endl;
}
vector<vector<vector<vector<int>>>> dp;

int count(int a, int b, int c, int d)
{
    // ベースケース
    if (a == 0 && b == 0 && c == 0 && d == 0)
        return 1;
    if (dp[a][b][c][d] != -1)
        return dp[a][b][c][d];

    int res = 0;

    // A(リンゴ)はいつでも置ける
    if (a > 0)
        res = (res + count(a - 1, b, c, d)) % MOD;

    // B(オレンジ)はいつでも置ける
    if (b > 0)
        res = (res + count(a, b - 1, c, d)) % MOD;

    // C(バナナ)は A(リンゴ)がすべて置かれてから
    if (c > 0 && a == 0)
        res = (res + count(a, b, c - 1, d)) % MOD;

    // D(ブドウ)は A(リンゴ)と B(オレンジ)がすべて置かれてから
    if (d > 0 && a == 0 && b == 0)
        res = (res + count(a, b, c, d - 1)) % MOD;

    return dp[a][b][c][d] = res;
}

int main()
{
    int A, B, C, D;
    cin >> A >> B >> C >> D;

    // DPテーブルの初期化
    dp.resize(A + 1, vector<vector<vector<int>>>(B + 1, vector<vector<int>>(C + 1, vector<int>(D + 1, -1))));

    // 結果を出力
    cout << count(A, B, C, D) << endl;

    return 0;
}

Submission Info

Submission Time
Task E - Fruit Lineup
User maeda__1221
Language C++ 20 (gcc 12.2)
Score 0
Code Size 5117 Byte
Status RE
Exec Time 1966 ms
Memory 3620024 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 475
Status
AC × 2
RE × 1
AC × 2
RE × 15
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 02_max_00.txt, 02_max_01.txt, 02_max_02.txt, 02_max_03.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3380 KiB
00_sample_01.txt AC 1 ms 3508 KiB
00_sample_02.txt RE 1499 ms 3618756 KiB
01_random_00.txt RE 1556 ms 3618436 KiB
01_random_01.txt RE 1504 ms 3618892 KiB
01_random_02.txt RE 1484 ms 3617272 KiB
01_random_03.txt RE 1565 ms 3619052 KiB
01_random_04.txt RE 1512 ms 3619592 KiB
01_random_05.txt RE 1886 ms 3619368 KiB
01_random_06.txt RE 1712 ms 3620024 KiB
01_random_07.txt RE 1587 ms 3619312 KiB
01_random_08.txt RE 1490 ms 3619852 KiB
01_random_09.txt RE 1520 ms 3618780 KiB
02_max_00.txt RE 1528 ms 3618748 KiB
02_max_01.txt RE 1494 ms 3619256 KiB
02_max_02.txt RE 1966 ms 3619660 KiB
02_max_03.txt RE 1501 ms 3619520 KiB