Task: | Spiraali |
Sender: | Bliz |
Submission time: | 2021-10-05 21:22:47 +0300 |
Language: | C++ (C++11) |
Status: | READY |
Result: | 100 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 15 |
#2 | ACCEPTED | 20 |
#3 | ACCEPTED | 65 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.01 s | 1 | details |
#2 | ACCEPTED | 0.01 s | 2 | details |
#3 | ACCEPTED | 0.01 s | 3 | details |
Code
#include <iostream> #include <cmath> using namespace std; struct Point { long long x, y; }; void get_input(Point points[], long long t) { long long x, y; for (long long i = 0; i < t; i++) { cin >> y >> x; points[i] = Point{x, y}; } } long long segment(long long l, long long c, long long x, long long y) { return l * l + (c * (l + 1u) - 1u) + x + y; } long long get_result(long long n, Point point) { long long m = (n >> 1); // n / 2 long long x = point.x, y = point.y; long long l; // Kerroksen sisäpuolelle jäävän palikan halkaisija long long r; // vastaus = n^2 - r; // r on ruudun numero, jos spiraali alkaisi keskeltä 0:lla. if (y <= m) { if (x <= m) { if (x > y) { l = 2 * (m - y); r = segment(l, 0u, x, -y); } else { l = 2 * (m - x); r = segment(l, 4u, -y, x); } } else { if (n - x >= y) { l = 2 * (m - y); r = segment(l, 0u, x, -y); } else { l = 2 * (x - m - 1); r = segment(l, 2u, y, -x); } } } else { if (x > m) { if (x < y) { l = 2 * (y - m - 1); r = segment(l, 2u, -x, y); } else { l = 2 * (x - m - 1); r = segment(l, 2u, y, -x); } } else { if (x > n - y) { l = 2 * (y - m - 1); r = segment(l, 2u, -x, y); } else { l = 2 * (m - x); r = segment(l, 4u, -y, x); } } } return n * n - r; } void get_results(long long results[], int n, Point points[], int t) { for (int i = 0; i < t; i++) results[i] = get_result(n, points[i]); } void print_results(long long results[], int t) { for (int i = 0; i < t; i++) cout << results[i] << "\n"; } int main() { int n; int t; cin >> n >> t; Point points[t]; get_input(points, t); long long results[t]; get_results(results, n, points, t); print_results(results, t); }
Test details
Test 1
Group: 1
Verdict: ACCEPTED
input |
---|
10 100 1 1 1 2 1 3 1 4 ... |
correct output |
---|
1 36 35 34 33 ... |
user output |
---|
1 36 35 34 33 ... Truncated |
Test 2
Group: 2
Verdict: ACCEPTED
input |
---|
1000 1000 371 263 915 322 946 880 53 738 ... |
correct output |
---|
773533 312166 206053 200080 593922 ... |
user output |
---|
773533 312166 206053 200080 593922 ... Truncated |
Test 3
Group: 3
Verdict: ACCEPTED
input |
---|
1000000000 1000 177757853 827347032 409613589 419171337 739269360 256524697 328695530 896842209 ... |
correct output |
---|
571375684522141210 967321186816598569 762879105851175000 370065046779516790 936897883750373771 ... |
user output |
---|
571375684522141210 967321186816598569 762879105851175000 370065046779516790 93689788375037 ... Truncated |