結果
| 問題 |
No.2984 [Cherry Anniversary 4] 満開の願いを込めた 27 の桜
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-12-09 03:06:56 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 116 ms / 4,000 ms |
| コード長 | 1,475 bytes |
| コンパイル時間 | 1,827 ms |
| コンパイル使用メモリ | 200,300 KB |
| 最終ジャッジ日時 | 2025-02-26 11:39:52 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using T = array<array<array<int,3>,3>,3>;
void input(T &A){ for(auto &&vec2 : A) for(auto &&vec1 : vec2) for(auto &&v : vec1) cin >> v; }
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
vector<int> dp(3 * 3 * 3, 2);
dp[0 + 1 * 3 + 2 * 9] = 0;
dp[1 + 0 * 3 + 2 * 9] = dp[2 + 1 * 3 + 0 * 9] = dp[0 + 2 * 3 + 1 * 9] = 1;
while(t--){
T A, B;
input(A), input(B);
vector<int> x(3), y, z;
iota(x.begin(), x.end(), 0);
y = z = x;
int ans = 1 << 30;
auto check = [&](){
T C{{}};
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
for(int k = 0; k < 3; k++){
C[0][y[j]][z[k]] += A[i][j][k];
C[1][x[i]][z[k]] += A[i][j][k];
C[2][x[i]][y[j]] += A[i][j][k];
}
}
}
return C == B;
};
auto f = [&](vector<int> &x){return x[0] + x[1] * 3 + x[2] * 9;};
do{
do{
do{
if(check()) ans = min(ans, dp[f(x)] + dp[f(y)] + dp[f(z)]);
}while(next_permutation(z.begin(), z.end()));
}while(next_permutation(y.begin(), y.end()));
}while(next_permutation(x.begin(), x.end()));
if(ans >> 30) ans = -1;
cout << ans << '\n';
}
}