Submission #359109

# Submission time Handle Problem Language Result Execution time Memory
359109 2021-01-26T11:03:57 Z jesus_coconut Tower Defense (CEOI19_towerdefense) C++17
100 / 100
1 ms 512 KB
#include <bits/stdc++.h>

using namespace std;

using pii = pair<int, int>;

pii s, t;
int d;

void read() {
	cin >> s.first >> s.second;
	cin >> t.first >> t.second;
	cin >> d;
}

int dist(pii s, pii t) {
	return abs(s.first - t.first) + abs(s.second - t.second);
}

void solve() {
	read();
	int dd = d - dist(s, t);
	if (dd == 0) {
		cout << 0 << '\n';
	} else if (dd < 0 || dd % 2 || dist(s, t) == 1) {
		cout << "impossible\n";
	} else {
		vector<pair<int, int>> ans;
		if (abs(s.first - t.first) > 1) {
			int x = t.first + (s.first - t.first) / abs(s.first - t.first);
			for (int i = min(s.second, t.second); i <= max(s.second, t.second); ++i) {
				ans.emplace_back(x, i);
			}
			dd -= 2;
			int mn = min(s.second, t.second) - 1;
			int mx = max(s.second, t.second) + 1;
			while (dd > 0) {
				ans.emplace_back(x, mn);
				ans.emplace_back(x, mx);
				dd -= 2;
				--mn;
				++mx;
			}
		} else if (abs(s.second - t.second) > 1){
			int y = t.second + (s.second - t.second) / abs(s.second - t.second);
			for (int i = min(s.first, t.first); i <= max(s.first, t.first); ++i) {
				ans.emplace_back(i, y);
			}
			dd -= 2;
			int mn = min(s.first, t.first) - 1;
			int mx = max(s.first, t.first) + 1;
			while (dd > 0) {
				ans.emplace_back(mn, y);
				ans.emplace_back(mx, y);
				dd -= 2;
				--mn;
				++mx;
			}
		} else {
			if (s.first < t.first && s.second < t.second
			    || s.first > t.first && s.second > t.second) {
				ans.emplace_back(min(s.first, t.first), max(s.second, t.second));
				ans.emplace_back(max(s.first, t.first), min(s.second, t.second));
			} else {
				ans.emplace_back(min(s.first, t.first), min(s.second, t.second));
				ans.emplace_back(max(s.first, t.first), max(s.second, t.second));
			}
			dd -= 4;
			if (dd < 0 || dd % 2) {
				cout << "impossible\n";
				return;
			} else {
				auto a1 = ans[0], a2 = ans[1];
				int dx1 = 1, dx2 = 1;
				{
					auto tmp = a1;
					tmp.first += dx1;
					if (tmp == s || tmp == t) dx1 = -1;
					tmp = a2;
					tmp.first += dx2;
					if (tmp == s || tmp == t) dx2 = -1;
				}
				while (dd > 0) {
					a1.first += dx1;
					a2.first += dx2;
					ans.emplace_back(a1);
					ans.emplace_back(a2);
					dd -= 2;
				}
			}
		}
		cout << ans.size() << '\n';
		for (auto &[a, b] : ans) cout << a << ' ' << b << '\n';
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);

	solve();

	return 0;
}

Compilation message

towerdefense.cpp: In function 'void solve()':
towerdefense.cpp:60:26: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   60 |    if (s.first < t.first && s.second < t.second
      |        ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 492 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 1 ms 364 KB Output is correct
13 Correct 1 ms 364 KB Output is correct
14 Correct 1 ms 364 KB Output is correct
15 Correct 1 ms 364 KB Output is correct
16 Correct 1 ms 364 KB Output is correct
17 Correct 1 ms 364 KB Output is correct
18 Correct 1 ms 364 KB Output is correct
19 Correct 1 ms 364 KB Output is correct
20 Correct 1 ms 364 KB Output is correct
21 Correct 1 ms 364 KB Output is correct
22 Correct 1 ms 364 KB Output is correct
23 Correct 1 ms 364 KB Output is correct
24 Correct 1 ms 364 KB Output is correct
25 Correct 1 ms 364 KB Output is correct
26 Correct 1 ms 364 KB Output is correct
27 Correct 1 ms 364 KB Output is correct
28 Correct 1 ms 364 KB Output is correct
29 Correct 1 ms 364 KB Output is correct
30 Correct 1 ms 364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 492 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 1 ms 364 KB Output is correct
13 Correct 1 ms 364 KB Output is correct
14 Correct 1 ms 364 KB Output is correct
15 Correct 1 ms 364 KB Output is correct
16 Correct 1 ms 364 KB Output is correct
17 Correct 1 ms 364 KB Output is correct
18 Correct 1 ms 364 KB Output is correct
19 Correct 1 ms 364 KB Output is correct
20 Correct 1 ms 364 KB Output is correct
21 Correct 1 ms 364 KB Output is correct
22 Correct 1 ms 364 KB Output is correct
23 Correct 1 ms 364 KB Output is correct
24 Correct 1 ms 364 KB Output is correct
25 Correct 1 ms 364 KB Output is correct
26 Correct 1 ms 364 KB Output is correct
27 Correct 1 ms 364 KB Output is correct
28 Correct 1 ms 364 KB Output is correct
29 Correct 1 ms 364 KB Output is correct
30 Correct 1 ms 364 KB Output is correct
31 Correct 1 ms 364 KB Output is correct
32 Correct 1 ms 364 KB Output is correct
33 Correct 1 ms 364 KB Output is correct
34 Correct 1 ms 364 KB Output is correct
35 Correct 1 ms 364 KB Output is correct
36 Correct 1 ms 364 KB Output is correct
37 Correct 1 ms 364 KB Output is correct
38 Correct 1 ms 364 KB Output is correct
39 Correct 1 ms 364 KB Output is correct
40 Correct 1 ms 364 KB Output is correct
41 Correct 1 ms 492 KB Output is correct
42 Correct 1 ms 364 KB Output is correct
43 Correct 1 ms 364 KB Output is correct
44 Correct 1 ms 364 KB Output is correct
45 Correct 1 ms 364 KB Output is correct
46 Correct 1 ms 364 KB Output is correct
47 Correct 1 ms 364 KB Output is correct
48 Correct 1 ms 364 KB Output is correct
49 Correct 1 ms 364 KB Output is correct
50 Correct 1 ms 364 KB Output is correct
51 Correct 1 ms 492 KB Output is correct
52 Correct 1 ms 492 KB Output is correct
53 Correct 1 ms 364 KB Output is correct
54 Correct 1 ms 364 KB Output is correct
55 Correct 1 ms 364 KB Output is correct
56 Correct 1 ms 384 KB Output is correct
57 Correct 1 ms 364 KB Output is correct
58 Correct 1 ms 364 KB Output is correct
59 Correct 1 ms 364 KB Output is correct
60 Correct 1 ms 364 KB Output is correct
61 Correct 1 ms 364 KB Output is correct
62 Correct 1 ms 364 KB Output is correct
63 Correct 1 ms 492 KB Output is correct
64 Correct 1 ms 364 KB Output is correct
65 Correct 1 ms 364 KB Output is correct
66 Correct 1 ms 492 KB Output is correct
67 Correct 1 ms 364 KB Output is correct
68 Correct 1 ms 364 KB Output is correct
69 Correct 1 ms 364 KB Output is correct
70 Correct 1 ms 364 KB Output is correct
71 Correct 1 ms 364 KB Output is correct
72 Correct 1 ms 512 KB Output is correct
73 Correct 1 ms 364 KB Output is correct
74 Correct 1 ms 364 KB Output is correct
75 Correct 1 ms 364 KB Output is correct
76 Correct 1 ms 364 KB Output is correct
77 Correct 1 ms 364 KB Output is correct
78 Correct 1 ms 364 KB Output is correct
79 Correct 1 ms 372 KB Output is correct
80 Correct 1 ms 364 KB Output is correct
81 Correct 1 ms 364 KB Output is correct
82 Correct 1 ms 364 KB Output is correct
83 Correct 1 ms 364 KB Output is correct
84 Correct 1 ms 364 KB Output is correct
85 Correct 1 ms 364 KB Output is correct
86 Correct 1 ms 364 KB Output is correct
87 Correct 1 ms 364 KB Output is correct
88 Correct 1 ms 364 KB Output is correct
89 Correct 1 ms 364 KB Output is correct
90 Correct 1 ms 364 KB Output is correct
91 Correct 1 ms 364 KB Output is correct
92 Correct 1 ms 364 KB Output is correct
93 Correct 1 ms 364 KB Output is correct
94 Correct 1 ms 384 KB Output is correct
95 Correct 1 ms 364 KB Output is correct
96 Correct 1 ms 364 KB Output is correct
97 Correct 1 ms 364 KB Output is correct
98 Correct 1 ms 364 KB Output is correct
99 Correct 1 ms 268 KB Output is correct
100 Correct 1 ms 364 KB Output is correct
101 Correct 1 ms 364 KB Output is correct
102 Correct 1 ms 364 KB Output is correct
103 Correct 1 ms 364 KB Output is correct
104 Correct 1 ms 364 KB Output is correct
105 Correct 1 ms 364 KB Output is correct
106 Correct 1 ms 364 KB Output is correct
107 Correct 1 ms 364 KB Output is correct
108 Correct 1 ms 364 KB Output is correct
109 Correct 1 ms 364 KB Output is correct
110 Correct 1 ms 364 KB Output is correct
111 Correct 1 ms 364 KB Output is correct
112 Correct 1 ms 364 KB Output is correct
113 Correct 1 ms 364 KB Output is correct
114 Correct 1 ms 364 KB Output is correct
115 Correct 1 ms 364 KB Output is correct
116 Correct 1 ms 364 KB Output is correct
117 Correct 1 ms 392 KB Output is correct
118 Correct 1 ms 364 KB Output is correct
119 Correct 1 ms 364 KB Output is correct
120 Correct 1 ms 364 KB Output is correct
121 Correct 1 ms 364 KB Output is correct
122 Correct 1 ms 384 KB Output is correct
123 Correct 1 ms 364 KB Output is correct
124 Correct 1 ms 364 KB Output is correct
125 Correct 1 ms 364 KB Output is correct
126 Correct 1 ms 364 KB Output is correct
127 Correct 1 ms 364 KB Output is correct
128 Correct 1 ms 364 KB Output is correct
129 Correct 1 ms 364 KB Output is correct
130 Correct 1 ms 364 KB Output is correct
131 Correct 1 ms 364 KB Output is correct
132 Correct 1 ms 364 KB Output is correct
133 Correct 1 ms 364 KB Output is correct
134 Correct 1 ms 364 KB Output is correct
135 Correct 1 ms 364 KB Output is correct
136 Correct 1 ms 364 KB Output is correct
137 Correct 1 ms 364 KB Output is correct
138 Correct 1 ms 364 KB Output is correct
139 Correct 1 ms 364 KB Output is correct
140 Correct 1 ms 364 KB Output is correct
141 Correct 1 ms 364 KB Output is correct
142 Correct 1 ms 364 KB Output is correct
143 Correct 1 ms 364 KB Output is correct
144 Correct 1 ms 364 KB Output is correct
145 Correct 1 ms 384 KB Output is correct
146 Correct 1 ms 364 KB Output is correct
147 Correct 1 ms 364 KB Output is correct
148 Correct 1 ms 364 KB Output is correct
149 Correct 1 ms 364 KB Output is correct