結果
問題 | No.2375 watasou and hibit's baseball |
ユーザー |
|
提出日時 | 2023-07-07 22:48:41 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 92 ms / 2,000 ms |
コード長 | 4,498 bytes |
コンパイル時間 | 2,140 ms |
コンパイル使用メモリ | 179,316 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-21 19:05:10 |
合計ジャッジ時間 | 3,967 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 36 |
ソースコード
#line 2 "library/template/template.hpp"#include <bits/stdc++.h>#line 3 "library/template/macro.hpp"#define all(x) std::begin(x), std::end(x)#define rall(x) std::rbegin(x), std::rend(x)#define elif else if#define updiv(N, X) (((N) + (X) - (1)) / (X))#define sigma(a, b) ((a + b) * (b - a + 1) / 2)#define INT(...) \int __VA_ARGS__; \scan(__VA_ARGS__)#define LL(...) \ll __VA_ARGS__; \scan(__VA_ARGS__)#define STR(...) \string __VA_ARGS__; \scan(__VA_ARGS__)#define CHR(...) \char __VA_ARGS__; \scan(__VA_ARGS__)#define DOU(...) \double __VA_ARGS__; \scan(__VA_ARGS__)#define LD(...) \ld __VA_ARGS__; \scan(__VA_ARGS__)#define pb push_back#define eb emplace_back#line 3 "library/template/alias.hpp"using ll = long long;using ld = long double;using pii = std::pair<int, int>;using pll = std::pair<ll, ll>;constexpr int inf = 1 << 30;constexpr ll INF = 1LL << 60;constexpr int dx[8] = {1, 0, -1, 0, 1, -1, 1, -1};constexpr int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};constexpr int mod = 998244353;constexpr int MOD = 1e9 + 7;#line 3 "library/template/func.hpp"template <typename T>inline bool chmax(T& a, T b) { return ((a < b) ? (a = b, true) : (false)); }template <typename T>inline bool chmin(T& a, T b) { return ((a > b) ? (a = b, true) : (false)); }template <typename T, typename U>std::ostream &operator<<(std::ostream &os, const std::pair<T, U> &p) {os << p.first << " " << p.second;return os;}template <typename T, typename U>std::istream &operator>>(std::istream &is, std::pair<T, U> &p) {is >> p.first >> p.second;return is;}template <typename T>std::ostream &operator<<(std::ostream &os, const std::vector<T> &v) {for (auto it = std::begin(v); it != std::end(v);) {os << *it << ((++it) != std::end(v) ? " " : "");}return os;}template <typename T>std::istream &operator>>(std::istream &is, std::vector<T> &v) {for (T &in : v) {is >> in;}return is;}inline void scan() {}template <class Head, class... Tail>inline void scan(Head &head, Tail &...tail) {std::cin >> head;scan(tail...);}template <class T>inline void print(const T &t) { std::cout << t << '\n'; }template <class Head, class... Tail>inline void print(const Head &head, const Tail &...tail) {std::cout << head << ' ';print(tail...);}template <class... T>inline void fin(const T &...a) {print(a...);exit(0);}#line 3 "library/template/util.hpp"struct IOSetup {IOSetup() {std::cin.tie(nullptr);std::ios::sync_with_stdio(false);std::cout.tie(0);std::cout << std::fixed << std::setprecision(12);std::cerr << std::fixed << std::setprecision(12);}} IOSetup;#line 3 "library/template/debug.hpp"#ifdef LOCAL#include <debug_print.hpp>#else#define debug(...)#endif#line 8 "library/template/template.hpp"using namespace std;#line 2 "A.cpp"vector<vector<int>> ball;int N;pii f(int x) {int base = N;int a = x / (base + 1);int b = x % (base + 1);return {a, b};}int rf(pii x) {int base = N;return x.first * (base + 1) + x.second;}int dis(int i, int j) {return abs(ball[i][0] - ball[j][0]) + abs(ball[i][1] - ball[j][1]);}int dis2(int i, int j) {return abs(ball[i][2] - ball[j][2]);}int main() {scan(N);INT(A, B);ball.assign(N, vector<int>(3));scan(ball);vector<vector<bool>> dp(1 << N, vector<bool>((N + 1) * (N + 1), false));int ans = 1;dp[0][rf({N, N})] = true;for (int i = 0; i < N; i++) {dp[1 << i][rf({N, i})] = true;for (int j = 0; j < N; j++) {if (i == j) continue;if (dis(i, j) >= A || dis2(i, j) >= B) {dp[(1 << i) | (1 << j)][rf({i, j})] = true;chmax(ans, 2);}}}for (int i = 0; i < (1 << N); i++) {for (int j = 0; j < (N + 1) * (N + 1); j++) {pii p = f(j);if (p.first == N || p.second == N) continue;if (!dp[i][j]) continue;chmax(ans, __builtin_popcount(i));for (int k = 0; k < N; k++) {if (i & (1 << k)) continue;if (dis(p.first, k) + dis(p.second, k) >= A || dis2(p.second, k) >= B) {dp[i | (1 << k)][rf({p.second, k})] = true;}}}}print(ans);}