結果

問題 No.967 引き算をして門松列(その2)
ユーザー kappybarkappybar
提出日時 2020-04-03 13:04:36
言語 C++14
(gcc 13.2.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 4,431 bytes
コンパイル時間 1,576 ms
コンパイル使用メモリ 167,436 KB
実行使用メモリ 4,500 KB
最終ジャッジ日時 2023-09-11 03:16:01
合計ジャッジ時間 2,533 ms
ジャッジサーバーID
(参考情報)
judge13 / judge15
このコードへのチャレンジ(β)

テストケース

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