CSES - Datatähti 2022 alku - Results
Submission details
Task:Spiraali
Sender:Alv
Submission time:2021-10-14 04:24:19
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 <vector>
using namespace std;
int vali(int kohta1, int kohta2, int koko) {
    int tulos = 0, tulos2 = 0;
    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(long long int suurinKoko, int koko, int kohta) {
    long long int tulos = 0;
    if (suurinKoko - koko != 0) {
        int dif = (suurinKoko + 2) / 2 - 1;
        int dif2 = koko / 2 - 1;
        tulos = dif * 4LL * dif - dif2 * 4LL * dif2 - 4LL * (koko - 1);
    }
    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);
        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, kohta)) << 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: 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
...