結果

問題 No.2309 [Cherry 5th Tune D] 夏の先取り
ユーザー KazunKazun
提出日時 2023-03-15 10:53:09
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 50 ms / 3,000 ms
コード長 7,308 bytes
コンパイル時間 4,113 ms
コンパイル使用メモリ 204,148 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-09-18 08:47:59
合計ジャッジ時間 4,747 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 3 ms
5,248 KB
testcase_01 AC 25 ms
5,376 KB
testcase_02 AC 23 ms
5,376 KB
testcase_03 AC 25 ms
5,376 KB
testcase_04 AC 25 ms
5,376 KB
testcase_05 AC 23 ms
5,376 KB
testcase_06 AC 23 ms
5,376 KB
testcase_07 AC 24 ms
5,376 KB
testcase_08 AC 27 ms
5,376 KB
testcase_09 AC 25 ms
5,376 KB
testcase_10 AC 23 ms
5,376 KB
testcase_11 AC 23 ms
5,376 KB
testcase_12 AC 24 ms
5,376 KB
testcase_13 AC 25 ms
5,376 KB
testcase_14 AC 20 ms
5,376 KB
testcase_15 AC 23 ms
5,376 KB
testcase_16 AC 20 ms
5,376 KB
testcase_17 AC 23 ms
5,376 KB
testcase_18 AC 21 ms
5,376 KB
testcase_19 AC 19 ms
5,376 KB
testcase_20 AC 20 ms
5,376 KB
testcase_21 AC 20 ms
5,376 KB
testcase_22 AC 17 ms
5,376 KB
testcase_23 AC 21 ms
5,376 KB
testcase_24 AC 28 ms
5,376 KB
testcase_25 AC 23 ms
5,376 KB
testcase_26 AC 27 ms
5,376 KB
testcase_27 AC 23 ms
5,376 KB
testcase_28 AC 22 ms
5,376 KB
testcase_29 AC 24 ms
5,376 KB
testcase_30 AC 26 ms
5,376 KB
testcase_31 AC 42 ms
5,376 KB
testcase_32 AC 42 ms
5,376 KB
testcase_33 AC 44 ms
5,376 KB
testcase_34 AC 44 ms
5,376 KB
testcase_35 AC 45 ms
5,376 KB
testcase_36 AC 7 ms
5,376 KB
testcase_37 AC 3 ms
5,376 KB
testcase_38 AC 6 ms
5,376 KB
testcase_39 AC 4 ms
5,376 KB
testcase_40 AC 5 ms
5,376 KB
testcase_41 AC 48 ms
5,376 KB
testcase_42 AC 50 ms
5,376 KB
testcase_43 AC 25 ms
5,376 KB
testcase_44 AC 24 ms
5,376 KB
testcase_45 AC 20 ms
5,376 KB
testcase_46 AC 21 ms
5,376 KB
testcase_47 AC 7 ms
5,376 KB
testcase_48 AC 7 ms
5,376 KB
testcase_49 AC 17 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>

using namespace std;
using ll=long long;

// マクロの定義
#define all(x) x.begin(), x.end()
#define len(x) ll(x.size())
#define elif else if
#define unless(cond) if (!(cond))

// オーバーロードマクロ
#define overload2(_1, _2, name, ...) name
#define overload3(_1, _2, _3, name, ...) name
#define overload4(_1, _2, _3, _4, name, ...) name
#define overload5(_1, _2, _3, _4, _5, name, ...) name

// 繰り返し系
#define rep1(n) for (ll i=0; i<n; i++)
#define rep2(i,n) for (ll i=0; i<n; i++)
#define rep3(i,a,b) for (ll i=a; i<b; i++)
#define rep4(i,a,b,c) for (ll i=a; i<b; i+=c)
#define rep(...) overload4(__VA_ARGS__,rep4,rep3,rep2,rep1)(__VA_ARGS__)

#define foreach1(x,a) for (auto &&x: a)
#define foreach2(x,y,a) for (auto &&[x,y]: a)
#define foreach3(x,y,z,a) for (auto &&[x,y,z]: a)
#define foreach4(x,y,z,w,a) for (auto &&[x,y,z,w]: a)
#define foreach(...) overload5(__VA_ARGS__,foreach4,foreach3,foreach2,foreach1)(__VA_ARGS__)

// 除算に関する関数
template<typename T, typename U>
T floor(T x, U y){return (x>0 ? x/y: (x-y+1)/y);}

template<typename T, typename U>
T ceil(T x, U y){return (x>0 ? (x+y-1)/y: x/y);}

template<typename T, typename U>
T mod(T x, U y){
    T q=floor(x,y);
    return x-q*y;
}

template<typename T, typename U>
pair<T,T> divmod(T x, U y){
    T q=floor(x,y);
    return {q,x-q*y};
}

// 指数に関する関数
ll intpow(ll x, ll y){
    ll a=1;
    while (y){
        if (y&1) a*=x;
        x*=x;
        y>>=1;
    }
    return a;
}

ll modpow(ll x, ll y, ll z){
    ll a=1;
    while (y){
        if (y&1) (a*=x)%=z;
        (x*=x)%=z;
        y>>=1;
    }
    return a;
}

ll sum(vector<int> &X){
    ll y=0;
    for (auto &&x: X) y+=x;
    return y;
}

template<typename T>
T sum(vector<T> &X){
    T y=T(0);
    for (auto &&x: X) y+=x;
    return y;
}

// max, min
template<typename T, typename U>
inline bool chmax(T &a, const U b){
    return (a<b ? a=b, 1: 0);
}

template<typename T, typename U>
inline bool chmin(T &a, const U b){
    return (a>b ? a=b, 1: 0);
}

template<class... T>
constexpr auto max(T... a){
    return max(initializer_list<common_type_t<T...>>{a...});
}
template<class... T>
constexpr auto min(T... a){
    return min(initializer_list<common_type_t<T...>>{a...});
}

template<class T>
T max(vector<T> X){
    T alpha=X[0];
    for (auto x:X) chmax(alpha, x);
    return alpha;
}

template<class T>
T min(vector<T> X){
    T alpha=X[0];
    for (auto x:X) chmin(alpha, x);
    return alpha;
}

//特別な演算

template<class T, class U>
pair<T,U> operator+(const pair<T,U> &lhs, const pair<T,U> &rhs){
    return pair<T,U>(lhs.first + rhs.first, lhs.second + rhs.second);
}

template<class T, class U>
pair<T,U> operator-(const pair<T,U> &lhs, const pair<T,U> &rhs){
    return pair<T,U>(lhs.first - rhs.first, lhs.second - rhs.second);
}

template<class T, class U>
pair<T,U> operator+=(pair<T,U> &lhs, const pair<T,U> &rhs){return lhs=lhs+rhs;}

template<class T, class U>
pair<T,U> operator-=(pair<T,U> &lhs, const pair<T,U> &rhs){return lhs=lhs-rhs;}

// 入出力
template<class... T>
void input(T&... a){(cin >> ... >> a);}

void print(){cout << "\n";}

template<class T, class... Ts>
void print(const T& a, const Ts&... b){
    cout << a;
    (cout << ... << (cout << " ", b));
    cout << "\n";
}

template<typename T, typename U>
istream &operator>>(istream &is, pair<T,U> &P){
    is >> P.first >> P.second;
    return is;
}

template<typename T, typename U>
ostream &operator<<(ostream &os, const pair<T,U> &P){
    os << "(" << P.first << ", " << P.second << ")";
    return os;
}

template<typename T>
vector<T> vector_input(int N, int index){
    vector<T> X(N+index);
    for (int i=index; i<index+N; i++) cin >> X[i];
    return X;
}

template<typename T>
istream &operator>>(istream &is, vector<T> &X){
    for (auto &x: X) is >> x;
    return is;
}

template<typename T>
ostream &operator<<(ostream &os, const vector<T> &X){
    int N=(int)len(X);
    os << "[";
    rep(i,N) os << (i ? ", ": "") << X[i];
    return os << "]";
}

template<typename T>
ostream &operator<<(ostream &os, const unordered_set<T> &S){
    os << "{{";
    int i=0;
    for (T a: S) {os << (i ? ", ": "") << a; i++;}
    return os << "}}";
}

template<typename T>
ostream &operator<<(ostream &os, const set<T> &S){
    os << "{";
    int i=0;
    for (T a: S) {os << (i ? ", ": "") << a; i++;}
    return os << "}";
}

template<typename T>
ostream &operator<<(ostream &os, const unordered_multiset<T> &S){
    os << "{{";
    int i=0;
    for (T a: S) {os << (i ? ", ": "") << a; i++;}
    return os << "}}";
}

template<typename T>
ostream &operator<<(ostream &os, const multiset<T> &S){
    os << "{";
    int i=0;
    for (T a: S) {os << (i ? ", ": "") << a; i++;}
    return os << "}";
}

template<typename A, typename T>
ostream &operator<<(ostream &os, const unordered_map<A,T> &M){
    os << "{{";
    int i=0;
    for (auto p:M) {os << (i ? ", ": "") << p.first << ": " << p.second; i++;}
    return os << "}}";
}

template<typename A, typename T>
ostream &operator<<(ostream &os, const map<A,T> &M){
    os << "{";
    int i=0;
    for (auto p:M) {os << (i ? ", ": "") << p.first << ": " << p.second; i++;}
    return os << "}";
}

//================================================
int A,B,C;
ll X,Y,Z,W;

ll earning(int x, int y, int z, int w){
    return x*X+y*Y+z*Z+w*W;
}

bool valid(int x, int y, int z, int w){
    return (x>=0) and (y>=0) and (z>=0) and (w>=0);
}

ll calc_A(int a, int b, int c){
    int x=0;
    int y=-a+c;
    int z=-b+c;
    int w=a+b-c;
    return valid(x,y,z,w)? earning(x,y,z,w): -1;
}

ll calc_B(int a, int b, int c){
    int x=a-c;
    int y=0;
    int z=a-b;
    int w=-a+b+c;
    return valid(x,y,z,w)? earning(x,y,z,w): -1;
}

ll calc_C(int a, int b, int c){
    int x=b-c;
    int y=-a+b;
    int z=0;
    int w=a-b+c;
    return valid(x,y,z,w)? earning(x,y,z,w): -1;
}

ll calc_D(int a, int b, int c){
    if ((a+b+c)%2!=0) return -1;

    int x=(a+b-c)/2;
    int y=(-a+b+c)/2;
    int z=(a-b+c)/2;
    int w=0;
    return valid(x,y,z,w)? earning(x,y,z,w): -1;
}

ll calc_E(int a, int b, int c){
    if ((a+b+c)%2!=1) return -1;

    int x=(a+b-c-1)/2;
    int y=(-a+b+c-1)/2;
    int z=(a-b+c-1)/2;
    int w=1;
    return valid(x,y,z,w)? earning(x,y,z,w): -1;
}

ll calc(int a, int b, int c){
    return max(
        calc_A(a,b,c),
        calc_B(a,b,c),
        calc_C(a,b,c),
        calc_D(a,b,c),
        calc_E(a,b,c));
}

//================================================
int main(){
    int T; input(T);

    for (int t=1; t<=T; t++){
        input(A,B,C); input(X,Y,Z,W);

        ll ans=0;
        // (p) イチゴ味を k 食
        for (int k=0; k<=A; k++) chmax(ans, calc(k,B,C));

        // (q) メロン味を k 食
        for (int k=0; k<=B; k++) chmax(ans, calc(A,k,C));

        // (r) ブルーハワイ味を k 食
        for (int k=0; k<=C; k++) chmax(ans, calc(A,B,k));

        print(ans);
    }
}
0