結果
問題 | No.753 最強王者決定戦 |
ユーザー | ats5515 |
提出日時 | 2018-11-09 22:07:57 |
言語 | C++11 (gcc 11.4.0) |
結果 |
RE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,509 bytes |
コンパイル時間 | 663 ms |
コンパイル使用メモリ | 84,116 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-21 05:59:24 |
合計ジャッジ時間 | 1,635 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | RE | - |
testcase_01 | RE | - |
testcase_02 | RE | - |
testcase_03 | RE | - |
コンパイルメッセージ
main.cpp: In function ‘long long int C(long long int)’: main.cpp:57:1: warning: no return statement in function returning non-void [-Wreturn-type] 57 | } | ^
ソースコード
#include <iostream> #include <vector> #include <map> #include <set> #include <queue> #include <string> #include <iomanip> #include <algorithm> #include <cmath> #include <stdio.h> using namespace std; #define int long long int MOD = 1000000007; int dp[1 << 16]; int A[16][16]; int sz = 0; vector<int> loser; vector<int> winner; int z = 0; int xx; int Y[16]; void dfs(int a) { if (a == (int)winner.size()) { dp[xx] += dp[z]; } else { for (int k = 0; k < loser.size(); k++) { if (Y[loser[k]] == 1) { if (A[winner[a]][loser[k]] == 1) { Y[loser[k]] = 0; z |= (1 << loser[k]); dfs(a + 1); Y[loser[k]] = 1; z ^= (1 << loser[k]); } } } } } int C(int x) { winner.clear(); loser.clear(); for (int i = 0; i < 16; i++) { if (x & (1 << i)) { winner.push_back(i); Y[i] = 0; } else { loser.push_back(i); Y[i] = 1; } } z = x; xx = x; dfs(0); } signed main() { cin.tie(0); ios::sync_with_stdio(false); int res = 0; for (int i = 0; i < 16; i++) { for (int j = 0; j < 16; j++) { cin >> A[i][j]; } } for (int i = 0; i < 16; i++) { for (int j = 0; j < 16; j++) { if (i > j) { A[i][j] = -A[j][i]; } } } dp[(1 << 16) - 1] = (1 << 15); for (int j = 0; j < 4; j++) { int k = (8 >> j); //cerr << k << endl; for (int x = (1 << k) - 1; x < (1 << 16); ) { C(x); int t = x | (x - 1); x = (t + 1) | (((~t & -~t) - 1) >> (__builtin_ctz(x) + 1)); } } for (int i = 0; i < 16; i++) { cout << dp[1 << i] << endl; } }