結果
| 問題 |
No.2094 Symmetry
|
| コンテスト | |
| ユーザー |
AngrySadEight
|
| 提出日時 | 2022-10-01 02:30:07 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,672 bytes |
| コンパイル時間 | 736 ms |
| コンパイル使用メモリ | 80,476 KB |
| 最終ジャッジ日時 | 2025-02-07 19:55:32 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 8 WA * 1 TLE * 25 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int main(){
int N;
ll K;
cin >> N >> K;
vector<string> S(2 * N);
for (int i = 0; i < 2 * N; i++) cin >> S[i];
vector<vector<ll>> C(2 * N, vector<ll>(2 * N));
for (int i = 0; i < 2 * N; i++){
for (int j = 0; j < 2 * N; j++){
cin >> C[i][j];
}
}
int bk_count = 0;
for (int i = 0; i < 2 * N; i++){
for (int j = 0; j < 2 * N; j++){
if (S[i][j] == '#'){
bk_count++;
}
}
}
ll INF = 100000000000000000;
ll ans = -INF;
for (int i = 0; i < (1 << 4 * N * N); i++){
int pp = 0;
for (int j = 0; j < 4 * N * N; j++){
if ((i >> j) & 1){
pp++;
}
}
if (pp != bk_count){
continue;
}
else{
ll score = 0;
bool symmetry = true;
for (int j = 0; j < 4 * N * N; j++){
int x = j / (2 * N);
int y = j % (2 * N);
int p = (x * 2 * N + (2 * N - 1 - y));
if ((i >> j) & 1){
if (!((i >> p) & 1)){
symmetry = false;
}
}
}
for (int j = 0; j < 4 * N * N; j++){
int x = j / (2 * N);
int y = j % (2 * N);
if ((i >> j) & 1){
score += C[x][y];
}
}
if (symmetry) score += K;
ans = max(ans, score);
}
}
cout << ans << endl;
}
AngrySadEight