結果

問題 No.466 ジオラマ
ユーザー tubo28
提出日時 2016-12-16 04:16:14
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 6 ms / 2,000 ms
コード長 1,191 bytes
コンパイル時間 1,829 ms
コンパイル使用メモリ 174,188 KB
実行使用メモリ 6,824 KB
最終ジャッジ日時 2024-11-30 10:12:54
合計ジャッジ時間 5,372 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 83
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(c) begin(c), end(c)
#define dump(x) cerr << __LINE__ << ":\t" #x " = " << (x) << endl

void fail(){
    puts("-1");
    exit(0);
}

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

    int k = 2;
    vector<pair<int,int>> es;
    vector<int> as, bs, cs;

    if(C < !A + !B) fail();

    if(!C){
        as.push_back(0);
        bs.push_back(1);
    } else {
        (A ? as : cs).push_back(0);
        (B ? bs : cs).push_back(1);
        rep(i, C - !A - !B) cs.push_back(k++);
    }
    rep(i, A - 1) as.push_back(k++);
    rep(i, B - 1) bs.push_back(k++);

    rep(i, A - 1) es.emplace_back(as[i], as[i+1]);
    rep(i, B - 1) es.emplace_back(bs[i], bs[i+1]);
    rep(i, C - 1) es.emplace_back(cs[i], cs[i+1]);
    if(A && C) es.emplace_back(0, cs[0]);
    if(B && C) es.emplace_back(1, cs[0]);
    if(!A && !B) es.emplace_back(1, 0);

    if((int)es.size() > D) fail();
    int n = A + B + C;
    int m = es.size();
    cout << n << ' ' << m << '\n';
    for(auto &e : es) cout << e.first << ' ' << e.second << '\n';
}
0