fork download
  1. #include <bits/stdc++.h>
  2. #define FOR(i, a, b) for (int i = (a); i <= (b); i++)
  3. #define FOD(i, a, b) for (int i = (a); i >= (b); i--)
  4. #define REP(i, n) for (int i = 0; i < (n); i++)
  5. #define ALL(x) (x).begin(), (x).end()
  6. #define TIME (1.0 * clock() / CLOCKS_PER_SEC)
  7. #define TASK "ANT"
  8. using namespace std;
  9.  
  10. const int MAXN = 1e3 + 5;
  11.  
  12. int dx[] = {0, 1, -1, 0};
  13. int dy[] = {1, 0, 0, -1};
  14.  
  15. int n, S;
  16. int dist[2 * MAXN][2 * MAXN];
  17. bool dd[2 * MAXN][2 * MAXN];
  18. long long ans;
  19.  
  20. void BFS(int x, int y) {
  21. queue <pair <int, int>> q;
  22. q.emplace(MAXN, MAXN);
  23. dist[MAXN][MAXN] = 0;
  24. while (q.size()) {
  25. pair <int, int> u = q.front(); q.pop();
  26. int x = u.first - MAXN, y = u.second - MAXN;
  27. ans++;
  28. if (dist[x + MAXN][y + MAXN] == S) continue;
  29. REP(i, 4) {
  30. int nx = x + dx[i];
  31. int ny = y + dy[i];
  32. if (abs(nx) > 1000 || abs(ny) > 1000 || dd[nx + MAXN][ny + MAXN]) continue;
  33. if (dist[nx + MAXN][ny + MAXN] > dist[x + MAXN][y + MAXN] + 1) {
  34. dist[nx + MAXN][ny + MAXN] = dist[x + MAXN][y + MAXN] + 1;
  35. q.emplace(nx + MAXN, ny + MAXN);
  36. }
  37. }
  38. }
  39. }
  40.  
  41. signed main(){
  42. ios_base::sync_with_stdio(false);
  43. cin.tie(nullptr);
  44. cout.tie(nullptr);
  45.  
  46. if(fopen(TASK".inp", "r")){
  47. freopen(TASK".inp","r",stdin);
  48. freopen(TASK".out","w",stdout);
  49. }
  50. cin >> n >> S;
  51.  
  52. ans = 2ll * S * S + 2 * S + 1;
  53.  
  54. FOR(i, 1, n) {
  55. int x, y; cin >> x >> y;
  56. dd[x + MAXN][y + MAXN] = 1;
  57. }
  58.  
  59. FOR(x, -1000, 1000) FOR(y, -1000, 1000) {
  60. dist[x + MAXN][y + MAXN] = 1e9;
  61. if (abs(x) + abs(y) <= S) ans--;
  62. }
  63.  
  64. BFS(0, 0);
  65. cout << ans;
  66. return 0;
  67. }
Success #stdin #stdout 0.01s 21552KB
stdin
4 5
-1 1
0 -1
0 1
1 0
stdout
26