結果

問題 No.967 引き算をして門松列(その2)
ユーザー kappybarkappybar
提出日時 2020-04-03 12:45:00
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 3,603 bytes
コンパイル時間 1,570 ms
コンパイル使用メモリ 167,452 KB
実行使用メモリ 4,384 KB
最終ジャッジ日時 2023-09-11 03:14:47
合計ジャッジ時間 2,397 ms
ジャッジサーバーID
(参考情報)
judge14 / judge11
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,380 KB
testcase_01 AC 2 ms
4,376 KB
testcase_02 WA -
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: 関数 ‘ll solve(int, int, int, ll, ll, ll)’ 内:
main.cpp:80:1: 警告: 制御が非 void 関数の終りに到達しました [-Wreturn-type]
   80 | }
      | ^

ソースコード

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(int a,int b,int 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;
                }
        }
}

bool ok(int a,int b,int 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--){
                int a,b,c;
                ll 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