結果
問題 | No.753 最強王者決定戦 |
ユーザー | horiesiniti |
提出日時 | 2018-11-20 17:48:57 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 77 ms / 1,000 ms |
コード長 | 1,711 bytes |
コンパイル時間 | 713 ms |
コンパイル使用メモリ | 74,340 KB |
実行使用メモリ | 21,120 KB |
最終ジャッジ日時 | 2024-06-06 21:13:49 |
合計ジャッジ時間 | 1,583 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 75 ms
21,088 KB |
testcase_01 | AC | 74 ms
21,120 KB |
testcase_02 | AC | 77 ms
21,120 KB |
testcase_03 | AC | 76 ms
20,968 KB |
ソースコード
#include <iostream> #include<vector> #include<string.h> #include<bitset> using namespace std; int data[17][17]; const int LIMIT=16; long long int dp[70000][16]; vector<long long int> seed[17]; vector<long long int> perm[70000]; int isV(int p1,int p2){ if(p1>p2){ std::swap(p1,p2); } if(data[p1][p2]==1)return p1; return p2; } int main(){ memset(dp,0,sizeof(dp)); for(int i=0;i<LIMIT;i++){ for(int j=0;j<LIMIT;j++){ scanf("%d",&data[i][j]); } } vector<long long int> vec[17]; for(int i=1;i<=65535;i++){ bitset<16> b1(i); seed[b1.count()].push_back(i); for(int j=0;j<16;j++){ if((i&(1<<j))!=0){ perm[i].push_back(j); } } } for(int i=0;i<LIMIT;i++){ for(int j=i+1;j<LIMIT;j++){ dp[(1<<i)|(1<<j)][isV(i,j)]=2; } } for(int i=0;i<seed[2].size();i++){ for(int j=i+1;j<seed[2].size();j++){ int l=seed[2][i]; int r=seed[2][j]; if((l&r)==0){ for(int x=0;x<2;x++){ for(int y=0;y<2;y++){ int a=perm[l][x]; int b=perm[r][y]; int v=isV(a,b); dp[l|r][v]+=(dp[l][a]*dp[r][b])*2; } } } } } for(int i=0;i<seed[4].size();i++){ for(int j=i+1;j<seed[4].size();j++){ int l=seed[4][i]; int r=seed[4][j]; if((l&r)==0){ for(int x=0;x<4;x++){ for(int y=0;y<4;y++){ int a=perm[l][x]; int b=perm[r][y]; int v=isV(a,b); dp[l|r][v]+=(dp[l][a]*dp[r][b])*2; } } } } } for(int i=0;i<seed[8].size();i++){ int l=seed[8][i]; int r=(~l)&(0xffff); for(int x=0;x<8;x++){ for(int y=0;y<8;y++){ int a=perm[l][x]; int b=perm[r][y]; int v=isV(a,b); dp[l|r][v]+=(dp[l][a]*dp[r][b]); } } } for(int i=0;i<16;i++){ cout<<dp[0xffff][i]<<"\n"; } }