답안 #892641

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
892641 2023-12-25T15:56:36 Z marvinthang Bodyguard (JOI21_bodyguard) C++17
28 / 100
2100 ms 791640 KB
/*************************************
*    author: marvinthang             *
*    created: 25.12.2023 20:42:18    *
*************************************/

#include <bits/stdc++.h>

using namespace std;

#define                  fi  first
#define                  se  second
#define                left  ___left
#define               right  ___right
#define                TIME  (1.0 * clock() / CLOCKS_PER_SEC)
#define             MASK(i)  (1LL << (i))
#define           BIT(x, i)  ((x) >> (i) & 1)
#define  __builtin_popcount  __builtin_popcountll
#define              ALL(v)  (v).begin(), (v).end()
#define           REP(i, n)  for (int i = 0, _n = (n); i < _n; ++i)
#define          REPD(i, n)  for (int i = (n); i-- > 0; )
#define        FOR(i, a, b)  for (int i = (a), _b = (b); i < _b; ++i) 
#define       FORD(i, b, a)  for (int i = (b), _a = (a); --i >= _a; ) 
#define       FORE(i, a, b)  for (int i = (a), _b = (b); i <= _b; ++i) 
#define      FORDE(i, b, a)  for (int i = (b), _a = (a); i >= _a; --i) 
#define        scan_op(...)  istream & operator >> (istream &in, __VA_ARGS__ &u)
#define       print_op(...)  ostream & operator << (ostream &out, const __VA_ARGS__ &u)
#ifdef LOCAL
    #include "debug.h"
#else
    #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
    #define DB(...) 23
    #define db(...) 23
    #define debug(...) 23
#endif

template <class U, class V> scan_op(pair <U, V>)  { return in >> u.first >> u.second; }
template <class T> scan_op(vector <T>)  { for (size_t i = 0; i < u.size(); ++i) in >> u[i]; return in; }
template <class U, class V> print_op(pair <U, V>)  { return out << '(' << u.first << ", " << u.second << ')'; }
template <size_t i, class T> ostream & print_tuple_utils(ostream &out, const T &tup) { if constexpr(i == tuple_size<T>::value) return out << ")";  else return print_tuple_utils<i + 1, T>(out << (i ? ", " : "(") << get<i>(tup), tup); }
template <class ...U> print_op(tuple<U...>) { return print_tuple_utils<0, tuple<U...>>(out, u); }
template <class Con, class = decltype(begin(declval<Con>()))> typename enable_if <!is_same<Con, string>::value, ostream&>::type operator << (ostream &out, const Con &con) { out << '{'; for (__typeof(con.begin()) it = con.begin(); it != con.end(); ++it) out << (it == con.begin() ? "" : ", ") << *it; return out << '}'; }
template <class A, class B> bool minimize(A &a, B b)  { return a > b ? a = b, true : false; }
template <class A, class B> bool maximize(A &a, B b)  { return a < b ? a = b, true : false; }

// end of template

const int MAXN = 2801;
const int MAXQ = 3003;
const int MAXV = MAXN * 2 + MAXQ;

int ma[MAXV][MAXV][2];
long long dp[MAXV][MAXV];

void process(void) {
	int n, q; cin >> n >> q;
	vector <long long> x(n), y(n), u(n), v(n), c(n);
	vector <long long> cx, cy;
	REP(i, n) {
		long long t, a, b;
		cin >> t >> a >> b >> c[i]; c[i] /= 2;
		x[i] = t + a; 
		y[i] = t - a;
		u[i] = t + abs(a - b) + b;
		v[i] = t + abs(a - b) - b;
		cx.push_back(x[i]); cx.push_back(u[i]);
		cy.push_back(y[i]); cy.push_back(v[i]);
	}
	vector <long long> s(q), t(q);
	REP(i, q) {
		int p, x; cin >> p >> x;
		s[i] = p + x; t[i] = p - x;
		cx.push_back(s[i]);
		cy.push_back(t[i]);
	}
	sort(ALL(cx)); cx.erase(unique(ALL(cx)), cx.end());
	sort(ALL(cy)); cy.erase(unique(ALL(cy)), cy.end());

	REP(i, n) {
		x[i] = lower_bound(ALL(cx), x[i]) - cx.begin();
		y[i] = lower_bound(ALL(cy), y[i]) - cy.begin();
		u[i] = lower_bound(ALL(cx), u[i]) - cx.begin();
		v[i] = lower_bound(ALL(cy), v[i]) - cy.begin();
		if (x[i] == u[i]) {
			FOR(p, y[i], v[i]) maximize(ma[x[i]][p][0], c[i]);
		} else {
			FOR(p, x[i], u[i]) maximize(ma[p][y[i]][1], c[i]);
		}
	}

	REPD(x, cx.size()) REPD(y, cy.size()) {
		if (y + 1 < (int) cy.size()) maximize(dp[x][y], dp[x][y + 1] + 1LL * (cy[y + 1] - cy[y]) * ma[x][y][0]);
		if (x + 1 < (int) cx.size()) maximize(dp[x][y], dp[x + 1][y] + 1LL * (cx[x + 1] - cx[x]) * ma[x][y][1]);
	}

	REP(i, q) {
		int x = lower_bound(ALL(cx), s[i]) - cx.begin();
		int y = lower_bound(ALL(cy), t[i]) - cy.begin();
		cout << dp[x][y] << '\n';
	}
}

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(nullptr); // cout.tie(nullptr);
	file("JOI21_bodyguard");
	// int t; cin >> t; while (t--)
	process();
	// cerr << "Time elapsed: " << TIME << " s.\n";
	return (0^0);
}

Compilation message

bodyguard.cpp: In function 'int main()':
bodyguard.cpp:30:61: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   30 |     #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bodyguard.cpp:104:2: note: in expansion of macro 'file'
  104 |  file("JOI21_bodyguard");
      |  ^~~~
bodyguard.cpp:30:94: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   30 |     #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                                                       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
bodyguard.cpp:104:2: note: in expansion of macro 'file'
  104 |  file("JOI21_bodyguard");
      |  ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2100 ms 660124 KB Output is correct
2 Correct 2097 ms 661228 KB Output is correct
3 Correct 1835 ms 362984 KB Output is correct
4 Correct 1666 ms 285276 KB Output is correct
5 Correct 1941 ms 621980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 215 ms 279504 KB Output is correct
2 Correct 230 ms 278476 KB Output is correct
3 Correct 188 ms 275920 KB Output is correct
4 Correct 2 ms 856 KB Output is correct
5 Correct 188 ms 203612 KB Output is correct
6 Correct 134 ms 153940 KB Output is correct
7 Correct 175 ms 187936 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 215 ms 279504 KB Output is correct
2 Correct 230 ms 278476 KB Output is correct
3 Correct 188 ms 275920 KB Output is correct
4 Correct 2 ms 856 KB Output is correct
5 Correct 188 ms 203612 KB Output is correct
6 Correct 134 ms 153940 KB Output is correct
7 Correct 175 ms 187936 KB Output is correct
8 Correct 583 ms 791640 KB Output is correct
9 Correct 561 ms 787496 KB Output is correct
10 Correct 412 ms 599084 KB Output is correct
11 Correct 19 ms 17716 KB Output is correct
12 Correct 345 ms 359976 KB Output is correct
13 Correct 383 ms 495428 KB Output is correct
14 Correct 393 ms 483956 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 215 ms 279504 KB Output is correct
2 Correct 230 ms 278476 KB Output is correct
3 Correct 188 ms 275920 KB Output is correct
4 Correct 2 ms 856 KB Output is correct
5 Correct 188 ms 203612 KB Output is correct
6 Correct 134 ms 153940 KB Output is correct
7 Correct 175 ms 187936 KB Output is correct
8 Correct 583 ms 791640 KB Output is correct
9 Correct 561 ms 787496 KB Output is correct
10 Correct 412 ms 599084 KB Output is correct
11 Correct 19 ms 17716 KB Output is correct
12 Correct 345 ms 359976 KB Output is correct
13 Correct 383 ms 495428 KB Output is correct
14 Correct 393 ms 483956 KB Output is correct
15 Runtime error 35 ms 2908 KB Execution killed with signal 11
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2100 ms 660124 KB Output is correct
2 Correct 2097 ms 661228 KB Output is correct
3 Correct 1835 ms 362984 KB Output is correct
4 Correct 1666 ms 285276 KB Output is correct
5 Correct 1941 ms 621980 KB Output is correct
6 Correct 215 ms 279504 KB Output is correct
7 Correct 230 ms 278476 KB Output is correct
8 Correct 188 ms 275920 KB Output is correct
9 Correct 2 ms 856 KB Output is correct
10 Correct 188 ms 203612 KB Output is correct
11 Correct 134 ms 153940 KB Output is correct
12 Correct 175 ms 187936 KB Output is correct
13 Correct 583 ms 791640 KB Output is correct
14 Correct 561 ms 787496 KB Output is correct
15 Correct 412 ms 599084 KB Output is correct
16 Correct 19 ms 17716 KB Output is correct
17 Correct 345 ms 359976 KB Output is correct
18 Correct 383 ms 495428 KB Output is correct
19 Correct 393 ms 483956 KB Output is correct
20 Runtime error 35 ms 2908 KB Execution killed with signal 11
21 Halted 0 ms 0 KB -