結果
問題 | No.43 野球の試合 |
ユーザー |
![]() |
提出日時 | 2015-06-12 02:56:51 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,431 bytes |
コンパイル時間 | 806 ms |
コンパイル使用メモリ | 104,436 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-06 15:48:20 |
合計ジャッジ時間 | 1,418 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 5 WA * 2 |
ソースコード
#include <iostream>#include <vector>#include <string>#include <stack>#include <queue>#include <deque>#include <set>#include <map>#include <algorithm> // require sort next_permutation count __gcd reverse etc.#include <cstdlib> // require abs exit atof atoi#include <cstdio> // require scanf printf#include <functional>#include <numeric> // require accumulate#include <cmath> // require fabs#include <climits>#include <limits>#include <cfloat>#include <iomanip> // require setw#include <sstream> // require stringstream#include <cstring> // require memset#include <cctype> // require tolower, toupper#include <fstream> // require freopen#include <ctime> // require srand#define rep(i,n) for(int i=0;i<(n);i++)#define ALL(A) A.begin(), A.end()#define INF 10/*No.43 野球の試合*/using namespace std;typedef long long ll;typedef pair<int, int> P;char t[10][10];char u[10][10];bool cmp (P a, P b ){if (a.first != b.first ){return a.first > b.first;} // end ifreturn a.second < b.second;}int solve (int N ){vector<P> score(N );rep (i, N ) {int win = 0;rep (j, N )if (u[i][j] == 'o' ) win++;score[i] = P (win, i );} // end repsort (ALL (score ), cmp );vector<int> rank (N, 0 );for (int i = 1; i < N; i++ )rank[i] = (score[i-1].first == score[i].first ? rank[i-1] : i );rep (i, N )if (score[i].second == 0 ){return (rank[i] + 1 );} // end ifreturn -1;}int main(){map<int,P > comb; comb.clear();int k = 0;for (int i = 1; i < 6; i++ ) rep (j, i ) comb[k++] = P (i, j );memset (t, 0, sizeof (t ) );ios_base::sync_with_stdio(0);int N; cin >> N;rep (i, N ) rep (j, N ) cin >> t[i][j];// チーム0の直接対戦する試合は チーム0 が必ず勝つrep (i, N ) rep (j, N )if (t[0][j] == '-' ) t[0][j] = 'o', t[j][0] = 'x';int res = INF;// チーム0以外は総当たりで順位を決めるfor (int cnt = 0; cnt < (1<<15 ); cnt++ ){memset (u, 0, sizeof (u ) );rep (i, N ) rep (j, N ) u[i][j] = t[i][j];rep (j, 15 ){int row = comb[j].first;int col = comb[j].second;if (u[row][col] == '-' ){if (cnt & (1<<j ) ){u[row][col] = 'o';u[col][row] = 'x';}else{u[row][col] = 'x';u[col][row] = 'o';} // end if} // end if} // end repint curr = solve (N );res = min (res, curr );} // end forcout << res << endl;return 0;}