답안 #473450

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
473450 2021-09-15T14:29:56 Z hhhhaura 쌀 창고 (IOI11_ricehub) C++14
68 / 100
1000 ms 5652 KB
#define wiwihorz
#include "ricehub.h"
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma loop-opt(on)

#define rep(i, a, b) for(int i = a; i <= b; i ++)
#define rrep(i, a, b) for(int i = b; i >= a; i --)
#define all(x) x.begin(), x.end()
#define ceil(a, b) ((a + b - 1) / (b))

#define INF 1000000000000000000
#define MOD 1000000007
#define eps (1e-9)

using namespace std;

#define ll long long int
#define lld long double
#define pii pair<ll, ll> 
#define random mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count())

#ifdef wiwihorz
#define print(a...) cerr << "Line " << __LINE__ << ": ", kout("[" + string(#a) + "] = ", a)
void vprint(auto L, auto R) {while(L < R) cerr << *L << " \n"[next(L) == R], ++L;}
void kout() { cerr << endl; }
template<class T1, class ... T2> void kout(T1 a, T2 ... e) { cerr << a << " ", kout(e...); }
#else
#define print(...) 0
#define vprint(...) 0
#endif
ll n, val;
vector<ll> a, pre;
pii get_val(int x, int len) {
	ll L, R, ans = 0, cnt = 0;
	L = 0, R = x;
	while(R - L > 1) {
		int mid = (L + R) / 2;
		if(a[x] - a[mid] <= len) R = mid;
		else L = mid;
	}
	cnt += x - R + 1;
	ans += a[x] * (x - R + 1) - (pre[x] - pre[R - 1]);
	L = x, R = n + 1;
	while(R - L > 1) {
		int mid = (L + R) / 2;
		if(a[mid] - a[x] <= len) L = mid;
		else R = mid;
	}
	cnt += L - x;
	ans += pre[L] - pre[x] - (L - x) * a[x];
	return {cnt, ans};
}
int besthub(int R, int L, int X[], ll B) {
	n = R, val = B;
	a.assign(R + 1, 0);
	pre.assign(R + 1, 0);
	rep(i, 1, R) {
		a[i] = X[i - 1];
		pre[i] = pre[i - 1] + X[i - 1];
	}
	ll ans = 0; 
	rep(i, 1, R) {
		ll l = 0, r = L;
		ll cost, cnt, val, val2, cc;
		while(r - l > 1) {
			int mid = (l + r) / 2;
			if(tie(cnt, cost) = get_val(i, mid), 
				cost <= B) val = cnt, l = mid, cc = cost;
			else r = mid, val2 = cnt; 
		}
		print(i, val, B - cc, r, val2 - val);
		ans = max(ans, val + min((B - cc) / r, val2 - val));
	}
	return ans;
}

Compilation message

ricehub.cpp:5: warning: ignoring '#pragma loop ' [-Wunknown-pragmas]
    5 | #pragma loop-opt(on)
      | 
ricehub.cpp:25:13: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   25 | void vprint(auto L, auto R) {while(L < R) cerr << *L << " \n"[next(L) == R], ++L;}
      |             ^~~~
ricehub.cpp:25:21: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   25 | void vprint(auto L, auto R) {while(L < R) cerr << *L << " \n"[next(L) == R], ++L;}
      |                     ^~~~
ricehub.cpp: In function 'int besthub(int, int, int*, long long int)':
ricehub.cpp:24:62: warning: 'cc' may be used uninitialized in this function [-Wmaybe-uninitialized]
   24 | #define print(a...) cerr << "Line " << __LINE__ << ": ", kout("[" + string(#a) + "] = ", a)
      |                                                              ^
ricehub.cpp:65:28: note: 'cc' was declared here
   65 |   ll cost, cnt, val, val2, cc;
      |                            ^~
ricehub.cpp:24:62: warning: 'val2' may be used uninitialized in this function [-Wmaybe-uninitialized]
   24 | #define print(a...) cerr << "Line " << __LINE__ << ": ", kout("[" + string(#a) + "] = ", a)
      |                                                              ^
ricehub.cpp:65:22: note: 'val2' was declared here
   65 |   ll cost, cnt, val, val2, cc;
      |                      ^~~~
ricehub.cpp:73:22: warning: 'val' may be used uninitialized in this function [-Wmaybe-uninitialized]
   73 |   ans = max(ans, val + min((B - cc) / r, val2 - val));
      |                  ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 292 KB Output is correct
4 Correct 3 ms 204 KB Output is correct
5 Correct 3 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 216 KB Output is correct
5 Correct 3 ms 204 KB Output is correct
6 Correct 3 ms 204 KB Output is correct
7 Correct 3 ms 204 KB Output is correct
8 Correct 3 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 2 ms 204 KB Output is correct
12 Correct 2 ms 204 KB Output is correct
13 Correct 2 ms 204 KB Output is correct
14 Correct 2 ms 204 KB Output is correct
15 Correct 3 ms 204 KB Output is correct
16 Correct 3 ms 304 KB Output is correct
17 Correct 2 ms 204 KB Output is correct
18 Correct 2 ms 204 KB Output is correct
19 Correct 3 ms 204 KB Output is correct
20 Correct 3 ms 204 KB Output is correct
21 Correct 13 ms 324 KB Output is correct
22 Correct 13 ms 332 KB Output is correct
23 Correct 13 ms 336 KB Output is correct
24 Correct 13 ms 344 KB Output is correct
25 Correct 14 ms 332 KB Output is correct
26 Correct 13 ms 348 KB Output is correct
27 Correct 13 ms 332 KB Output is correct
28 Correct 14 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 316 KB Output is correct
2 Correct 7 ms 204 KB Output is correct
3 Correct 24 ms 352 KB Output is correct
4 Correct 24 ms 332 KB Output is correct
5 Correct 14 ms 332 KB Output is correct
6 Correct 13 ms 328 KB Output is correct
7 Correct 26 ms 356 KB Output is correct
8 Correct 30 ms 368 KB Output is correct
9 Correct 13 ms 332 KB Output is correct
10 Correct 15 ms 352 KB Output is correct
11 Correct 21 ms 304 KB Output is correct
12 Correct 21 ms 332 KB Output is correct
13 Correct 28 ms 368 KB Output is correct
14 Correct 32 ms 376 KB Output is correct
15 Correct 14 ms 340 KB Output is correct
16 Correct 14 ms 332 KB Output is correct
17 Correct 21 ms 356 KB Output is correct
18 Correct 21 ms 356 KB Output is correct
19 Correct 26 ms 360 KB Output is correct
20 Correct 28 ms 388 KB Output is correct
21 Correct 131 ms 684 KB Output is correct
22 Correct 157 ms 704 KB Output is correct
23 Correct 133 ms 744 KB Output is correct
24 Correct 128 ms 732 KB Output is correct
25 Correct 139 ms 668 KB Output is correct
26 Correct 132 ms 708 KB Output is correct
27 Correct 133 ms 660 KB Output is correct
28 Correct 133 ms 772 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 533 ms 1976 KB Output is correct
2 Correct 545 ms 1968 KB Output is correct
3 Execution timed out 1083 ms 5652 KB Time limit exceeded
4 Halted 0 ms 0 KB -