結果

問題 No.335 門松宝くじ
ユーザー izuru_matsuuraizuru_matsuura
提出日時 2016-02-11 22:30:14
言語 C++11
(gcc 11.4.0)
結果
MLE  
実行時間 -
コード長 2,210 bytes
コンパイル時間 1,593 ms
コンパイル使用メモリ 178,256 KB
実行使用メモリ 819,256 KB
最終ジャッジ日時 2023-10-21 23:31:51
合計ジャッジ時間 5,919 ms
ジャッジサーバーID
(参考情報)
judge11 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,348 KB
testcase_01 AC 2 ms
4,348 KB
testcase_02 AC 1 ms
4,348 KB
testcase_03 AC 1 ms
4,348 KB
testcase_04 AC 1 ms
4,348 KB
testcase_05 MLE -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

namespace {

    template<class T> ostream& operator<<(ostream& os, const vector<T>& vs) {
        if (vs.empty()) return os << "[]";
        os << "[" << vs[0];
        for (int i = 1; i < vs.size(); i++) os << " " << vs[i];
        return os << "]";
    }

    int N, M;
    vector< vector<int> > E;
    void input() {
        cin >> N >> M;
        E.resize(M, vector<int>(N, -1));
        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) {
                cin >> E[i][j];
            }
        }
    }

    bool kadomatsu(int a, int b, int c) {
        if (a < b && b < c) return false;
        if (c < b && b < a) return false;
        if (a == b || b == c || c == a) return false;
        return true;
    }

    void solve() {
        vector< set< tuple<int, int, int> >> T(M);
        for (int p = 0; p < M; p++) {
            auto& X = E[p];
            for (int i = 0; i < N; i++) {
                for (int j = i + 1; j < N; j++) {
                    for (int k = j + 1; k < N; k++) {
                        int x = X[i], y = X[j], z = X[k];
                        if (kadomatsu(x, y, z)) {
                            T[p].insert(make_tuple(x, y, z));
                        }
                    }
                }
            }
        }
        vector<int> Z(M, 0);
        for (int x = 1; x <= N; x++) {
            for (int y = 1; y <= N; y++) {
                if (x == y) continue;
                for (int p = 0; p < M; p++) {
                    int m = 0;
                    for (int z = 1; z <= N; z++) {
                        if (x == z || y == z) continue;

                        auto t = make_tuple(x, y, z);
                        if (T[p].count(t)) {
                            m = max(max(m, x), max(y, z));
                        }
                    }
                    Z[p] += m;
                }
            }
        }

        int s = -1, index = -1;
        for (int i = 0; i < M; i++) {
            if (s < Z[i]) {
                s = Z[i];
                index = i;
            }
        }
        cout << index << endl;




    }
}

int main() {
    input(); solve();
    return 0;
}
0