CSES - Datatähti 2022 alku - Results
Submission details
Task:Spiraali (Spiral)
Sender:T
Submission time:2021-10-04 02:53:27
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

/**
 * Datathti 2022 alku
 * Spiraali (Spiral)
 * @author TRS
 */
//Include
#include <bits/stdc++.h>
//Definitions
using namespace std;
//Constants
#define infinity 0x3f3f3f3f
#define linfinity 0x3f3f3f3f3f3f3f3f
#define MOD 1000000007
int main() {
    ios_base::sync_with_stdio(false);
    cout.tie(NULL);
    cin.tie(NULL);
    long long n;
    int t;
    cin>>n>>t;
    long long y, x;
    long long layer;
    long long Answer;
    for (int test = 0; test < t; test++) {
        cin>>y>>x;
        if (y <= n / 2 && x <= n / 2) {
            layer = min(y, x);
            Answer = (1) + (layer - 1) * (2 * (4 * n - 4) + (layer - 2) * (-8)) / 2;
            if (y > x) {
                Answer += (y - layer);
            }
            else if (y < x) {
                Answer = (1) + (layer) * (2 * (4 * n - 4) + (layer - 1) * (-8)) / 2;
                Answer -= (x - layer);
            }
        }
        else if (y <= n / 2 && x > n / 2) {
            layer = min(y, n - x + 1);
            Answer = (3 * n - 2) + (layer - 1) * (2 * (4 * n - 10) + (layer - 2) * (-8)) / 2;
            if (y > n - x + 1) {
                Answer -= (y - layer);
            }
            else if (y < n - x + 1) {
                Answer += (n - x + 1 - layer);
            }
        }
        else if (y > n / 2 && x <= n / 2) {
            layer = min(n - y + 1, x);
            Answer = (n) + (layer - 1) * (2 * (4 * n - 6) + (layer - 2) * (-8)) / 2;
            if (n - y + 1 > x) {
                Answer -= (n - y + 1 - layer);
            }
            else if (n - y + 1 < x) {
                Answer += (x - layer);
            }
        }
        else if (y > n / 2 && x > n / 2) {
            layer = min(n - y, n - x);
            Answer = (2 * n - 1) + (layer) * (2 * (4 * n - 8) + (layer - 1) * (-8)) / 2;
            if (n - y > n - x) {
                Answer += (n - y - layer);
            }
            else if (n - y < n - x) {
                Answer -= (n - x - layer);
            }
        }
        if (y == 1 && x == 1) {
            Answer = 1;
        }
        cout<<Answer<<"\n";
    }
    return 0;
}

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