結果
問題 | No.2375 watasou and hibit's baseball |
ユーザー |
|
提出日時 | 2023-07-07 22:53:55 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 63 ms / 2,000 ms |
コード長 | 1,493 bytes |
コンパイル時間 | 1,956 ms |
コンパイル使用メモリ | 197,064 KB |
最終ジャッジ日時 | 2025-02-15 08:10:46 |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 36 |
ソースコード
#include <bits/stdc++.h>using namespace std;int main () {int N, A, B;cin >> N >> A >> B;int X[20], Y[20], K[20];for (int i = 0; i < N; i ++) cin >> X[i] >> Y[i] >> K[i];bool dp[(1 << 14)][14][14];std::vector<int> P;for (auto& a : dp) {for (auto& b : a) {for (auto& c : b) {c = false;}}}auto dst = [&](int a, int b) -> int{return abs(X[a] - X[b]) + abs(Y[a] - Y[b]);};int ans = 1;for (int i = 0; i < (1 << N); i ++) {P.clear();for (int j = 0; j < N; j ++) {if ((i >> j) & 1) {P.push_back(j);}}if (P.size() < 2) {} else if (P.size() == 2) {int a = P[0], b = P[1];dp[i][a][b] = dp[i][b][a] = (dst(a, b) >= A || abs(K[a] - K[b]) >= B);if (dp[i][a][b]) {ans = max(ans, 2);}} else {for (int a = 0; a < P.size(); a ++) {for (int b = a + 1; b < P.size(); b ++) {for (int c = 0; c < P.size(); c ++) {if (a == c || b == c) continue;int p = P[a], q = P[b], r = P[c];if (dst(p, r) + dst(q, r) >= A) {dp[i][r][q] = dp[i][r][q] || dp[i ^ (1 << r)][q][p];dp[i][r][p] = dp[i][r][p] || dp[i ^ (1 << r)][p][q];}if (abs(K[r] - K[q]) >= B) {dp[i][r][q] = dp[i][r][q] || dp[i ^ (1 << r)][q][p];}if (abs(K[r] - K[p]) >= B) {dp[i][r][p] = dp[i][r][p] || dp[i ^ (1 << r)][p][q];}if (dp[i][r][q] || dp[i][r][p]) {ans = max(ans, (int)P.size());}}}}}}cout << ans << endl;}