CSES - Datatähti 2022 alku - Results
Submission details
Task:Spiraali (Spiral)
Sender:Alv
Submission time:2021-10-12 23:24:54
Language:C++11
Status:READY
Result:35
Feedback
groupverdictscore
#1ACCEPTED15
#2ACCEPTED20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1details
#2ACCEPTED0.01 s2details
#3--3details

Code

#include <iostream>
#include <vector>
using namespace std;
int vali(int kohta1, int kohta2, int koko) {
    int tulos = 0, tulos2 = 0;
    if (koko % 2 == 1) {
        tulos = koko / 2 + 1 - kohta1;
        if (tulos < 0) tulos = -tulos;
        tulos2 = koko / 2 + 1 - kohta2;
        if (tulos2 < 0) tulos2 = -tulos2;
        if (tulos < tulos2) tulos = tulos2;
        if (kohta1 == koko / 2 + 1 && kohta2 == koko / 2 + 1) tulos = 0;
    }
    else {
        if (kohta1 < koko / 2) tulos = koko / 2 - kohta1;
        else if (kohta1 > koko / 2 + 1) tulos = kohta1 - (koko / 2 + 1);
        if (kohta2 < koko / 2) tulos2 = koko / 2 - kohta2;
        else if (kohta2 > koko / 2 + 1) tulos2 = kohta2 - (koko / 2 + 1);
        if (tulos < tulos2) tulos = tulos2;
    }
    return tulos;
}
long long int ekstra(int suurinKoko, int koko) {
    long long int tulos = 0;
    while (suurinKoko != koko) {
        tulos += 4LL * (suurinKoko - 1);
        suurinKoko -= 2;
    }
    return tulos;
}
long long int Yhteensa(int kohta1, int kohta2, int koko, long long int lisa) {
    long long int tulos = 0;
    if (kohta1 != koko && kohta2 == 1) {
        tulos += kohta1;
    }
    else if (kohta1 == koko && kohta2 != koko) {
        tulos += koko - 1LL + kohta2;
    }
    else if (kohta1 != 1 && kohta2 == koko) {
        tulos += 2LL * (koko - 1) + (koko - (kohta1 - 1));
    }
    else if (kohta1 == 1 && kohta2 != 1) {
        tulos += 3LL * (koko - 1) + (koko - (kohta2 - 1));
    }
    if (tulos == 0) tulos = 1;
    tulos += lisa;
    return tulos;
}
int main()
{
    int koko;
    int maara;
    cin >> koko >> maara;
    vector<int> numeroita1;
    vector<int> numeroita2;
    int num1, num2;
    for (int a = 0; a < maara; a++) {
        cin >> num1 >> num2;
        numeroita1.push_back(num1);
        numeroita2.push_back(num2);
    }
    for (int i1 = 0; i1 < maara; i1++) {
        int valiKoko = 0;
        int kohta = vali(numeroita1[i1], numeroita2[i1], koko);
        if (koko % 2 == 1) valiKoko = 1;
        else valiKoko = 2;
        valiKoko += kohta * 2;
        numeroita1[i1] -= (koko - valiKoko) / 2;
        numeroita2[i1] -= (koko - valiKoko) / 2;
        cout << Yhteensa(numeroita1[i1], numeroita2[i1], valiKoko, ekstra(koko, valiKoko)) << endl;
    }
}

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:

input
1000000000 1000
177757853 827347032
409613589 419171337
739269360 256524697
328695530 896842209
...

correct output
571375684522141210
967321186816598569
762879105851175000
370065046779516790
936897883750373771
...

user output
(empty)