답안 #38317

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
38317 2018-01-03T16:08:20 Z romanasa 움직이는 개미 (IZhO12_ants) C++14
0 / 100
2000 ms 2024 KB
#include <bits/stdc++.h>
#define err(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)

using namespace std;

typedef long long ll;

map<int, vector<int> > X, Y;

#define TASK "e"

int main() {
	int w, h, k, t;
	cin >> w >> h >> k >> t;
	
	vector<int> x(k), y(k), d(k);
	
	for (int i = 0; i < k; i++) {
		cin >> x[i] >> y[i] >> d[i];
		if (d[i] == 2 || d[i] == 4) X[x[i]].push_back(i);
		else Y[y[i]].push_back(i);
	}
	
	for (auto c : X) {
		auto &cur = c.second;
		sort(cur.begin(), cur.end(), [&](int a, int b) { return y[a] < y[b]; });
		for (int it = 0; it < t; it++) {
			vector<int> used((int)cur.size());
			for (int i = 0; i + 1 < (int)cur.size(); i++) if (!used[i]) {
				if (y[cur[i]] + 1 == y[cur[i + 1]] && d[cur[i]] == 2 && d[cur[i + 1]] == 4) {
					swap(d[cur[i]], d[cur[i + 1]]);
					used[i] = 1, used[i + 1] = 1;
					continue;
				}
				if (y[cur[i]] + 2 == y[cur[i + 1]] && d[cur[i]] == 2 && d[cur[i + 1]] == 4) {
					swap(d[cur[i]], d[cur[i + 1]]);
					y[cur[i]]++;
					y[cur[i + 1]]--;
					used[i] = 1, used[i + 1] = 1;
					continue;
				}
			}
			for (int i = 0; i < (int)cur.size(); i++) if (!used[i]) 
				if (d[cur[i]] == 2) y[cur[i]]++;
				else y[cur[i]]--; 
			for (int i = 0; i + 1 < (int)cur.size(); i++) 
				if (y[cur[i]] == y[cur[i + 1]] && d[cur[i]] == 2 && d[cur[i + 1]] == 4) swap(d[cur[i]], d[cur[i + 1]]);
			for (int i = 0; i < (int)cur.size(); i++) {
				if (y[cur[i]] == h && d[cur[i]] == 2) d[cur[i]] = 4;
				if (y[cur[i]] == 0 && d[cur[i]] == 4) d[cur[i]] = 2;
			}
		}
	}
	
	for (auto c : Y) {
		auto &cur = c.second;
		sort(cur.begin(), cur.end(), [&](int a, int b) { return x[a] < x[b]; });
		for (int it = 0; it < t; it++) {
			vector<int> used((int)cur.size());
			for (int i = 0; i + 1 < (int)cur.size(); i++) if (!used[i]) {
				if (x[cur[i]] + 1 == x[cur[i + 1]] && d[cur[i]] == 1 && d[cur[i + 1]] == 3) {
					swap(d[cur[i]], d[cur[i + 1]]);
					used[i] = 1, used[i + 1] = 1;
					continue;
				}
				if (x[cur[i]] + 2 == x[cur[i + 1]] && d[cur[i]] == 1 && d[cur[i + 1]] == 3) {
					swap(d[cur[i]], d[cur[i + 1]]);
					x[cur[i]]++;
					x[cur[i + 1]]--;
					used[i] = 1, used[i + 1] = 1;
					continue;
				}
			}
			for (int i = 0; i < (int)cur.size(); i++) if (!used[i]) 
				if (d[cur[i]] == 1) x[cur[i]]++;
				else x[cur[i]]--; 
			for (int i = 0; i + 1 < (int)cur.size(); i++) 
				if (x[cur[i]] == x[cur[i + 1]] && d[cur[i]] == 1 && d[cur[i + 1]] == 3) swap(d[cur[i]], d[cur[i + 1]]);
			for (int i = 0; i < (int)cur.size(); i++) {
				if (x[cur[i]] == w && d[cur[i]] == 1) d[cur[i]] = 3;
				if (x[cur[i]] == 0 && d[cur[i]] == 3) d[cur[i]] = 1;
			}
		}
	}
	
	for (int i = 0; i < k; i++) cout << x[i] << " " << y[i] << " " << d[i] << "\n";

	return 0;
}

Compilation message

ants.cpp: In function 'int main()':
ants.cpp:43:49: warning: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
    for (int i = 0; i < (int)cur.size(); i++) if (!used[i]) 
                                                 ^
ants.cpp:74:49: warning: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
    for (int i = 0; i < (int)cur.size(); i++) if (!used[i]) 
                                                 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2024 KB Output is correct
2 Correct 0 ms 2024 KB Output is correct
3 Correct 0 ms 2024 KB Output is correct
4 Correct 0 ms 2024 KB Output is correct
5 Correct 0 ms 2024 KB Output is correct
6 Correct 0 ms 2024 KB Output is correct
7 Correct 0 ms 2024 KB Output is correct
8 Correct 0 ms 2024 KB Output is correct
9 Correct 0 ms 2024 KB Output is correct
10 Correct 0 ms 2024 KB Output is correct
11 Correct 0 ms 2024 KB Output is correct
12 Correct 0 ms 2024 KB Output is correct
13 Correct 13 ms 2024 KB Output is correct
14 Correct 33 ms 2024 KB Output is correct
15 Execution timed out 2000 ms 2024 KB Execution timed out
16 Halted 0 ms 0 KB -