답안 #292487

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
292487 2020-09-07T05:57:13 Z shrek12357 Go (COCI18_go) C++14
90 / 100
1 ms 256 KB
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <climits>
#include <cmath>
#include <fstream>
#include <queue>
using namespace std;

struct p {
	int a;
	int b;
	int t;
};

int main() {
	int n, m, z;
	cin >> n >> m >> z;
	vector<p> pokeL, pokeR;
	pokeR.push_back({ m, 0, 2005 });
	for (int i = 0; i < z; i++) {
		int a, b, c;
		cin >> a >> b >> c;
		if (a < m) {
			pokeL.push_back({ a, b, c });
		}
		else if(a > m) {
			pokeR.push_back({ a, b, c });
		}
		else {
			pokeR.push_back({ a, b, c });
			pokeL.push_back({ a, b, c });
		}
	}
	pokeL.push_back({ m, 0, 2005 });
	reverse(pokeL.begin(), pokeL.end());
	int best = 0;
	for (int i = 0; i < pokeR.size(); i++) {
		for (int j = 0; j < pokeL.size(); j++) {
			bool ok = false;
			int time = 2 * (m - pokeL[j].a);
			int cur = 0;
			for (int k = 0; k <= j; k++) {
				if (m - pokeL[k].a < pokeL[k].t) {
					cur += pokeL[k].b;
				}
			}
			for (int k = 0; k <= i; k++) {
				if (pokeR[k].a - m + time < pokeR[k].t) {
					cur += pokeR[k].b;
					if (k == i) {
						ok = true;
					}
				}
			}
			if (ok) {
				best = max(best, cur);
			}
		}
	}
	for (int i = 0; i < pokeL.size(); i++) {
		for (int j = 0; j < pokeR.size(); j++) {
			bool ok = false;
			int time = 2 * (pokeR[j].a - m);
			int cur = 0;
			for (int k = 0; k <= j; k++) {
				if (pokeR[k].a - m < pokeR[k].t) {
					cur += pokeR[k].b;
				}
			}
			for (int k = 0; k <= i; k++) {
				if (m - pokeL[k].a + time < pokeL[k].t) {
					cur += pokeL[k].b;
					if (k == i) {
						ok = true;
					}
				}
			}
			if (ok) {
				best = max(best, cur);
			}
		}
	}
	cout << best << endl;
}

Compilation message

go.cpp: In function 'int main()':
go.cpp:41:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<p>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |  for (int i = 0; i < pokeR.size(); i++) {
      |                  ~~^~~~~~~~~~~~~~
go.cpp:42:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<p>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |   for (int j = 0; j < pokeL.size(); j++) {
      |                   ~~^~~~~~~~~~~~~~
go.cpp:64:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<p>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |  for (int i = 0; i < pokeL.size(); i++) {
      |                  ~~^~~~~~~~~~~~~~
go.cpp:65:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<p>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |   for (int j = 0; j < pokeR.size(); j++) {
      |                   ~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 256 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 0 ms 256 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 1 ms 256 KB Output is correct
7 Incorrect 1 ms 256 KB Output isn't correct
8 Correct 1 ms 256 KB Output is correct
9 Correct 1 ms 256 KB Output is correct
10 Correct 1 ms 256 KB Output is correct