CSES - Datatähti 2022 alku - Results
 Task: Spiraali Sender: Bliz Submission time: 2021-10-05 21:22:47 Language: C++11 Status: READY Result: 100
Feedback
groupverdictscore
#1ACCEPTED15
#2ACCEPTED20
#3ACCEPTED65
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1details
#2ACCEPTED0.01 s2details
#3ACCEPTED0.01 s3details

### 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
...

#### 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
...

#### 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
936897883750373771
...