結果
| 問題 | 
                            No.335 門松宝くじ
                             | 
                    
| コンテスト | |
| ユーザー | 
                             izuru_matsuura
                         | 
                    
| 提出日時 | 2016-02-11 22:30:14 | 
| 言語 | C++11(廃止可能性あり)  (gcc 13.3.0)  | 
                    
| 結果 | 
                             
                                MLE
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 2,210 bytes | 
| コンパイル時間 | 1,559 ms | 
| コンパイル使用メモリ | 176,352 KB | 
| 実行使用メモリ | 769,052 KB | 
| 最終ジャッジ日時 | 2024-09-22 01:00:22 | 
| 合計ジャッジ時間 | 5,185 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 1 MLE * 1 -- * 8 | 
ソースコード
#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;
}
            
            
            
        
            
izuru_matsuura