結果

問題 No.335 門松宝くじ
ユーザー masamasa
提出日時 2016-01-16 00:25:39
言語 C++11
(gcc 11.4.0)
結果
RE  
実行時間 -
コード長 1,605 bytes
コンパイル時間 667 ms
コンパイル使用メモリ 70,464 KB
実行使用メモリ 8,696 KB
最終ジャッジ日時 2023-10-19 23:49:50
合計ジャッジ時間 9,946 ms
ジャッジサーバーID
(参考情報)
judge11 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <utility>
#include <cmath>

using namespace std;

bool isKadomatu(int a, int b, int c) {
	if (a == b || b == c || c == a) {
		return false;
	}
	if (max({a, b, c}) == b || min({a, b, c}) == b) {
		return true;
	}
	return false;
}

int calc_maximum(vector<int> &kuji, int idx_x, int idx_y) {
	if (idx_x > idx_y) {
		swap(idx_x, idx_y);
	}

	int limit = kuji.size();
	int maxi = 0;
	for (int i = 0; i < idx_x; i++) {
		if (isKadomatu(kuji[i], kuji[idx_x], kuji[idx_y])) {
			maxi = max(maxi, max({kuji[i], kuji[idx_x], kuji[idx_y]}));
		}
	}
	for (int i = idx_x + 1; i < idx_y; i++) {
		if (isKadomatu(kuji[idx_x], kuji[i], kuji[idx_y])) {
			maxi = max(maxi, max({kuji[idx_x], kuji[i], kuji[idx_y]}));
		}
	}
	for (int i = idx_y + 1; i < limit; i++) {
		if (isKadomatu(kuji[idx_x], kuji[idx_y], kuji[i])) {
			maxi = max(maxi, max({kuji[idx_x], kuji[idx_y], kuji[i]}));
		}
	}
	return maxi;
}

int main() {
	int n, m;

	cin >> n >> m;
	vector<vector<int>> e(m, vector<int>(n, -1));
	vector<vector<int>> val2idx(m, vector<int>(n, -1));
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			cin >> e[i][j];
			val2idx[i][e[i][j]] = j;
		}
	}

	vector<int> total(m, 0);
	for (int i = 1; i <= n; i++) {
		for (int j = i + 1; j <= n; j++) {
			for (int k = 0; k < m; k++) {
				total[k] += calc_maximum(e[k], val2idx[k][i], val2idx[k][j]);
			}
		}
	}

	int maxi = -1;
	int ans = -1;
	for (int i = 0; i < m; i++) {
		if (maxi < total[i]) {
			maxi = total[i];
			ans = i;
		}
	}
	cout << ans << endl;
	return 0;
}
0