답안 #100747

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
100747 2019-03-13T22:52:09 Z jasony123123 Bulldozer (JOI17_bulldozer) C++11
20 / 100
2000 ms 49732 KB
#include <bits/stdc++.h>
using namespace std;
#define FOR(i,start,end) for(int i=start;i<(int)(end);i++)
#define FORE(i,start,end) for(int i=start;i<=(int)end;i++)
#define RFORE(i,start,end) for(int i = start; i>=end; i--)
#define all(a) a.begin(), a.end()
#define v vector
#define mp make_pair
typedef long long ll;
typedef pair<int, int > pii;
template<class T> void minn(T &a, T b) { a = min(a, b); }
template<class T> void maxx(T &a, T b) { a = max(a, b); }
void io() {
#ifdef LOCAL_PROJECT 
	freopen("input.in", "r", stdin); freopen("output.out", "w", stdout);
#else 
#endif 
	ios_base::sync_with_stdio(false); cin.tie(NULL);
}
/****************************************************************/
const int MAXN = 2000;
int N, x[2000], y[2000], w[2000], pos[2000];
int treearray[2000];

struct Seg {
	int data[2000];

	void set(int x, int val) {
		data[x] = val;
	}
	void build() {

	}
	void update(int x, int val) {
		data[x] = val;
	}
	ll query() {
	//	cout << "Query: ";
	//	FOR(i, 0, N) cout << data[i] << " ";
		ll best = 0;
		FOR(i, 0, N) FOR(j, i, N) {
			ll tmp = 0;
			FORE(x, i, j) tmp += data[x];
			maxx(best, tmp);
		}
	//	cout << ":: " << best << "\n";
		return best;
	}
} tree; 

struct upd {
	ll vx, vy;
	int ia, ib;
	upd(ll _vx, ll _vy, int _a, int _b) : vx(_vx), vy(_vy), ia(_a), ib(_b) {}
};
v<upd> lines;

void perform_swap(int i, int j) {
//	cout << "Swapping " << i << " " << j << "\n";
	swap(pos[i], pos[j]);
	tree.update(pos[i], w[i]);
	tree.update(pos[j], w[j]);
}

void setup() {
	cin >> N;
	v<int> pnts(N);
	FOR(i, 0, N) {
		cin >> x[i] >> y[i] >> w[i];
		pnts[i] = i;
	}
	sort(all(pnts), [](int &i, int &j) {
		return mp(x[i], y[i]) < mp(x[j], y[j]);
	});
	FOR(i, 0, N) {
		pos[pnts[i]] = i;
		tree.set(i, w[pnts[i]]);
	}
	tree.build();
}

int main() {
	io();
	setup();
	FOR(i, 0, N) FOR(j, 0, N) if (x[i] < x[j])
		lines.push_back(upd(x[j] - x[i], y[j] - y[i], i, j));

	sort(all(lines), [](upd &a, upd &b) {
		return a.vy*b.vx < b.vy*a.vx;
	});

	ll best = tree.query();
	for (int i = 0; i < lines.size(); ) {
		ll curx = lines[i].vx, cury = lines[i].vy;
		while (i < lines.size() && cury*lines[i].vx == curx*lines[i].vy) {
			perform_swap(lines[i].ia, lines[i].ib);
			i++;
		}
		maxx(best, tree.query());
	}
	cout << best << "\n";
}

Compilation message

bulldozer.cpp: In function 'int main()':
bulldozer.cpp:93:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < lines.size(); ) {
                  ~~^~~~~~~~~~~~~~
bulldozer.cpp:95:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while (i < lines.size() && cury*lines[i].vx == curx*lines[i].vy) {
          ~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 640 KB Output is correct
2 Correct 2 ms 640 KB Output is correct
3 Correct 3 ms 640 KB Output is correct
4 Correct 2 ms 640 KB Output is correct
5 Incorrect 2 ms 640 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 574 ms 640 KB Output is correct
2 Correct 569 ms 640 KB Output is correct
3 Correct 568 ms 640 KB Output is correct
4 Correct 560 ms 640 KB Output is correct
5 Correct 556 ms 640 KB Output is correct
6 Correct 561 ms 640 KB Output is correct
7 Correct 560 ms 640 KB Output is correct
8 Correct 562 ms 640 KB Output is correct
9 Correct 563 ms 640 KB Output is correct
10 Correct 563 ms 640 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Correct 2 ms 384 KB Output is correct
13 Correct 2 ms 384 KB Output is correct
14 Correct 2 ms 384 KB Output is correct
15 Correct 2 ms 384 KB Output is correct
16 Correct 2 ms 384 KB Output is correct
17 Correct 3 ms 384 KB Output is correct
18 Correct 2 ms 384 KB Output is correct
19 Correct 2 ms 384 KB Output is correct
20 Correct 2 ms 384 KB Output is correct
21 Correct 555 ms 640 KB Output is correct
22 Correct 556 ms 640 KB Output is correct
23 Correct 569 ms 640 KB Output is correct
24 Correct 556 ms 640 KB Output is correct
25 Correct 557 ms 640 KB Output is correct
26 Correct 564 ms 640 KB Output is correct
27 Correct 564 ms 640 KB Output is correct
28 Correct 562 ms 640 KB Output is correct
29 Correct 564 ms 640 KB Output is correct
30 Correct 573 ms 640 KB Output is correct
31 Correct 565 ms 640 KB Output is correct
32 Correct 560 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 574 ms 640 KB Output is correct
2 Correct 569 ms 640 KB Output is correct
3 Correct 568 ms 640 KB Output is correct
4 Correct 560 ms 640 KB Output is correct
5 Correct 556 ms 640 KB Output is correct
6 Correct 561 ms 640 KB Output is correct
7 Correct 560 ms 640 KB Output is correct
8 Correct 562 ms 640 KB Output is correct
9 Correct 563 ms 640 KB Output is correct
10 Correct 563 ms 640 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Correct 2 ms 384 KB Output is correct
13 Correct 2 ms 384 KB Output is correct
14 Correct 2 ms 384 KB Output is correct
15 Correct 2 ms 384 KB Output is correct
16 Correct 2 ms 384 KB Output is correct
17 Correct 3 ms 384 KB Output is correct
18 Correct 2 ms 384 KB Output is correct
19 Correct 2 ms 384 KB Output is correct
20 Correct 2 ms 384 KB Output is correct
21 Correct 555 ms 640 KB Output is correct
22 Correct 556 ms 640 KB Output is correct
23 Correct 569 ms 640 KB Output is correct
24 Correct 556 ms 640 KB Output is correct
25 Correct 557 ms 640 KB Output is correct
26 Correct 564 ms 640 KB Output is correct
27 Correct 564 ms 640 KB Output is correct
28 Correct 562 ms 640 KB Output is correct
29 Correct 564 ms 640 KB Output is correct
30 Correct 573 ms 640 KB Output is correct
31 Correct 565 ms 640 KB Output is correct
32 Correct 560 ms 640 KB Output is correct
33 Execution timed out 2059 ms 49732 KB Time limit exceeded
34 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 574 ms 640 KB Output is correct
2 Correct 569 ms 640 KB Output is correct
3 Correct 568 ms 640 KB Output is correct
4 Correct 560 ms 640 KB Output is correct
5 Correct 556 ms 640 KB Output is correct
6 Correct 561 ms 640 KB Output is correct
7 Correct 560 ms 640 KB Output is correct
8 Correct 562 ms 640 KB Output is correct
9 Correct 563 ms 640 KB Output is correct
10 Correct 563 ms 640 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Correct 2 ms 384 KB Output is correct
13 Correct 2 ms 384 KB Output is correct
14 Correct 2 ms 384 KB Output is correct
15 Correct 2 ms 384 KB Output is correct
16 Correct 2 ms 384 KB Output is correct
17 Correct 3 ms 384 KB Output is correct
18 Correct 2 ms 384 KB Output is correct
19 Correct 2 ms 384 KB Output is correct
20 Correct 2 ms 384 KB Output is correct
21 Correct 555 ms 640 KB Output is correct
22 Correct 556 ms 640 KB Output is correct
23 Correct 569 ms 640 KB Output is correct
24 Correct 556 ms 640 KB Output is correct
25 Correct 557 ms 640 KB Output is correct
26 Correct 564 ms 640 KB Output is correct
27 Correct 564 ms 640 KB Output is correct
28 Correct 562 ms 640 KB Output is correct
29 Correct 564 ms 640 KB Output is correct
30 Correct 573 ms 640 KB Output is correct
31 Correct 565 ms 640 KB Output is correct
32 Correct 560 ms 640 KB Output is correct
33 Execution timed out 2059 ms 49732 KB Time limit exceeded
34 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 640 KB Output is correct
2 Correct 2 ms 640 KB Output is correct
3 Correct 3 ms 640 KB Output is correct
4 Correct 2 ms 640 KB Output is correct
5 Incorrect 2 ms 640 KB Output isn't correct
6 Halted 0 ms 0 KB -