結果

問題 No.967 引き算をして門松列(その2)
ユーザー kappybarkappybar
提出日時 2020-04-03 13:10:04
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 4,431 bytes
コンパイル時間 1,317 ms
コンパイル使用メモリ 170,384 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-06-28 17:47:35
合計ジャッジ時間 1,967 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 2 ms
5,376 KB
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function 'll solve(ll, ll, ll, ll, ll, ll)':
main.cpp:99:1: warning: control reaches end of non-void function [-Wreturn-type]
   99 | }
      | ^

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pp;
const ll INF = 1e18;
const int MOD = 1000000007;
#define rep(i,n) for(int i=0;i<n;i++)

ll solve(ll a,ll b,ll c,ll x,ll y,ll z){
        if(a==b && b == c){
                if(a < 3) return -1;
                return min({x+2*z,z+2*x,2*y+x,2*y+z});
        }if(a==b && b < c){
                ll res = INF;
                if(b>=2) res = min(res,y);
                if(a>=3) res = min(res,x+z*(c-a+2));
                if(a>=3) res = min(res,2*x+z*(c-b+1));
                if(res == INF) return -1;
                return res;
        }if(c==b && b < a){
                ll res = INF;
                if(b>=2) res = min(res,y);
                if(c>=3) res = min(res,z+x*(a-c+2));
                if(c>=3) res = min(res,2*z+x*(a-b+1));
                if(res == INF) return -1;
                return res;
        }if(a < b && b == c){
                ll res = INF;
                if(a+1 == b){
                        if(b >= 3) res = min(res,2*y);
                        if(a >= 2) res = min(res,x+z*(c-b+1));
                        if(a >= 2) res = min(res,z*(c-a+1));
                        if(res == INF) return -1;
                        return res;
                }else{
                        if(a >= 2) res = min(res,y*(b-a+1));
                        res = min(res,z*(c-b+1));
                        return res;
                }
        }if(c < b && b == a){
                ll res = INF;
                if(c+1 == b){
                        if(b >= 3) res = min(res,2*y);
                        if(c >= 2) res = min(res,z+x*(a-b+1));
                        if(c >= 2) res = min(res,x*(a-c+1));
                        if(res == INF) return -1;
                        return res;
                }else{
                        if(c >= 2) res = min(res,y*(b-c+1));
                        res = min(res,x*(a-b+1));
                        return res;
                }
        }if(a < b && b < c){
                ll res = INF;
                if(a+1 == b){
                        if(a >= 2) res = min(res,z*(c-a+1));
                        if(a >= 2) res = min(res,x+z*(c-a));
                        if(a >= 2) res = min(res,y*(b-a+1));
                        if(res == INF) return -1;
                        return res;
                }else{
                        res = min(res,z*(c-b+1));
                        if(a >= 2) res = min(res,y*(b-a+1));
                        return res;
                }
        }if(c < b && b < a){
                ll res = INF;
                if(c+1 == b){
                        if(c >= 2) res = min(res,x*(a-c+1));
                        if(c >= 2) res = min(res,z+x*(a-c));
                        if(c >= 2) res = min(res,y*(b-c+1));
                        if(res == INF) return -1;
                        return res;
                }else{
                        res = min(res,z*(a-b+1));
                        if(c >= 2) res = min(res,y*(b-c+1));
                        return res;
                }
        }if(a==c && c < b){
                if(a >= 2) return min(x,z);
                return -1;
        }if(a==c && b < c){
                if(b+1 == a){
                        ll res = INF;
                        if(b >= 3) res = min(res,x*(a-b+1)+z*(c-b+2));
                        if(b >= 3) res = min(res,x*(a-b+2)+z*(c-b+1));
                        if(b >= 2) res = min(res,min(y+x,y+z));
                        if(res == INF) return -1;
                        return res;
                }else{
                        ll res = INF;
                        if(b >= 3) res = min(res,x*(a-b+1)+z*(c-b+2));
                        if(b >= 3) res = min(res,x*(a-b+2)+z*(c-b+1));
                        if(b >= 2) res = min(res,min(x,z));
                        if(res == INF) return -1;
                        return res;
                }
        }
}

bool ok(ll a,ll b,ll c){
        if(a < c && c < b) return 1;
        if(c < a && a  < b) return 1;
        if(b < a && a < c) return 1;
        if(b < c && c < a) return 1;
        else return 0;
}

int main(){
        int t;
        cin >> t;
        while(t--){
                ll  a,b,c,x,y,z;
                cin >> a >> b >> c >> x >> y >> z;
                if(ok(a,b,c)) cout << 0 << endl;
                else cout << solve(a,b,c,x,y,z) << endl;
        }
        return 0;
}
0