結果
| 問題 |
No.43 野球の試合
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-12-04 11:36:07 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 12 ms / 5,000 ms |
| コード長 | 2,371 bytes |
| コンパイル時間 | 971 ms |
| コンパイル使用メモリ | 80,804 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-27 19:41:52 |
| 合計ジャッジ時間 | 1,316 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 7 |
ソースコード
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
#include <queue>
using namespace std;
#define REP(i,first,last) for (int i=first;i<last;i++)
int n;
int result = 100000;
int win_count_0 = 0;
char game_results[6][6];
vector<char> game_results_pattern;
int main(){
cin>>n;
char val;
//inputを表にする
REP(i,0,n){
REP(j,0,n){
cin >> val;
game_results[i][j] = val;
// cout<<val<<" ";
}
// cout<<endl;
}
//0の残りの試合を負けて順位が上がる可能性
//0の試合の残りを全て「勝ち」にして、勝ち数を保存しておく
// REP(i,1,n){
// if (game_results[0][i] == 'o' || game_results[0][i] == '-') {
// game_results[0][i] = 'o';
// win_count_0 += 1;
// }
// }
//game_results_patternに現状を記録
REP(i,0,n){
REP(j,i+1,n){
game_results_pattern.push_back(game_results[i][j]);
}
}
//queueで処理
queue<vector<char>> que;
que.push(game_results_pattern);
while (!que.empty()) {
vector<char> q = que.front();
// for(auto it=q.begin();it!=q.end();it++) {
// cout<<*it<<" ";
// }
// cout<<endl;
que.pop();
vector<char>::iterator it = find(q.begin(), q.end(), '-');
if (it != q.end()) {
q[it - q.begin()] = 'o';
que.push(q);
q[it - q.begin()] = 'x';
que.push(q);
} else {
// for(auto it=q.begin();it!=q.end();it++) {
// cout<<*it<<" ";
// }
// cout<<endl;
int c = 0;
vector<int> points(6);
REP(i,0,n){
REP(j,i+1,n){
if (q[c] == 'o') {
points[i] += 1;
} else {
points[j] += 1;
}
c++;
}
}
win_count_0 = points[0];
// for (auto it=points.begin();it!=points.end();it++) {
// cout<<*it<<" ";
// }
// cout<<endl;
sort(points.begin(), points.end(), greater<int>());
points.erase(unique(points.begin(), points.end()), points.end());
vector<int>::iterator it = find(points.begin(), points.end(), win_count_0);
int new_result = it - points.begin() + 1;
result = (new_result < result) ? new_result : result;
// for (auto it=points.begin();it!=points.end();it++) {
// cout<<*it<<" ";
// }
// cout<<endl;
}
}
cout<<result<<endl;
}