結果
| 問題 |
No.335 門松宝くじ
|
| コンテスト | |
| ユーザー |
kurenai3110
|
| 提出日時 | 2016-12-20 18:43:07 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,063 bytes |
| コンパイル時間 | 1,058 ms |
| コンパイル使用メモリ | 91,064 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-12-14 11:35:02 |
| 合計ジャッジ時間 | 6,943 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 1 |
| other | AC * 10 |
ソースコード
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <functional>
#include <cmath>
using namespace std;
bool used[801][801];
int main() {
int n, m; cin >> n >> m;
vector<vector<int>>E(m);
for (int i = 0; i < m; i++){
E[i].resize(n);
for (int j = 0; j < n; j++){
cin >> E[i][j];
}
}
vector<pair<long long, int>>A;
for (int i = 0; i < m; i++){
for (int s = 0; s <= n; s++)for (int t = 0; t <= n; t++)used[s][t] = 0;
int maxE = n;
long long sum = 0;
while (E[i].size()){
bool right = false;
int Ej = 0;
vector<pair<int, int>>L, R;
for (int j = 0; j < E[i].size(); j++){
if (E[i][j] == maxE){
Ej = j;
right = true;
E[i].erase(E[i].begin() + j);
j--;
continue;
}
if (right)R.push_back(make_pair(E[i][j], j - Ej));
else L.push_back(make_pair(E[i][j], j));
}
sort(L.begin(), L.end());
sort(R.begin(), R.end());
int cnt = 0;
for (int j = 0; j < L.size(); j++){
for (int k = j + 1; k < L.size(); k++){
if (L[k].second < L[j].second){
if (!used[L[j].first][L[k].first])used[L[j].first][L[k].first] = true, cnt++;
if (!used[L[j].first][maxE])used[L[j].first][maxE] = true, cnt++;
if (!used[L[k].first][maxE])used[L[k].first][maxE] = true, cnt++;
}
}
}
for (int j = 0; j < R.size(); j++){
for (int k = j + 1; k < R.size(); k++){
if (R[k].second > R[j].second){
if (!used[R[j].first][R[k].first])used[R[j].first][R[k].first] = true, cnt++;
if (!used[R[j].first][maxE])used[R[j].first][maxE] = true, cnt++;
if (!used[R[k].first][maxE])used[R[k].first][maxE] = true, cnt++;
}
}
}
for (int j = 0; j < R.size(); j++)for (int k = 0; k < L.size(); k++){
if (!used[min(L[k].first, R[j].first)][max(L[k].first, R[j].first)])used[min(L[k].first, R[j].first)][max(L[k].first, R[j].first)] = true, cnt++;
}
sum += cnt*maxE;
maxE--;
}
A.push_back(make_pair((long long)1e9 - sum, i));
}
sort(A.begin(), A.end());
cout << A[0].second << endl;
return 0;
}
kurenai3110