CSES - Datatähti 2022 alku - Results
Submission details
Task:Spiraali
Sender:eaittok
Submission time:2021-10-06 14:37:27 +0300
Language:CPython3
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED15
#2ACCEPTED20
#3ACCEPTED65
Test results
testverdicttimegroup
#1ACCEPTED0.03 s1details
#2ACCEPTED0.04 s2details
#3ACCEPTED0.04 s3details

Code

def neljannes(n, y, x):
    if y < x and x+y <= n+1:
        return 4
    if y >= x and x+y < n+1:
        return 1
    if y > x and x+y >= n+1:
        return 2
    return 3

def kerros(n, y, x, neljannes):
    if neljannes == 1:
        return x
    if neljannes == 2:
        return n-y+1
    if neljannes == 3:
        return n-x+1
    return y

def pyramidin_juuri(n, neljannes):
    return 1+(neljannes-1)*(n-1)

def kerroksen_leveys(n, kerros):
    return n-1-2*(kerros-1)+1

def pyramidin_kerroksen_alku(n, neljannes, kerros):
    return n**2-kerroksen_leveys(n, kerros)**2+1 \
    +(kerroksen_leveys(n, kerros)-1)*(neljannes-1)

def alun_koordinaatit(n, neljannes, kerros):
    if neljannes == 1:
        return (kerros, kerros)
    if neljannes == 2:
        return (n-kerros+1, kerros)
    if neljannes == 3:
        return (n-kerros+1, n-kerros+1)
    return (kerros, n-kerros+1)

def luku_kerroksessa(x, y, n, neljannes, kerros):
    if neljannes == 1:
        etaisyys = y-alun_koordinaatit(n, neljannes, kerros)[0]
    if neljannes == 2:
        etaisyys = x-alun_koordinaatit(n, neljannes, kerros)[1]
    if neljannes == 3:
        etaisyys = -(y-alun_koordinaatit(n, neljannes, kerros)[0])
    if neljannes == 4:
        etaisyys = -(x-alun_koordinaatit(n, neljannes, kerros)[1])

    return pyramidin_kerroksen_alku(n, neljannes, kerros) + etaisyys

ekarivi = input()
n = int(ekarivi.split()[0])
t = int(ekarivi.split()[1])

for i in range(t):
    koordinaatit = input()
    y = int(koordinaatit.split()[0])
    x = int(koordinaatit.split()[1])
            
    nelj = neljannes(n, y, x)
    kerr = kerros(n, y, x, nelj)
    alku = pyramidin_kerroksen_alku(n, nelj, kerr)
    leve = kerroksen_leveys(n, kerr)
    alko = alun_koordinaatit(n, nelj, kerr)
    luke = luku_kerroksessa(x, y, n, nelj, kerr)
    print(luke)

if __name__ == "__main__" and False:
    n = 6
    for y in range(1, n+1):
        rivi = []
        for x in range(1, n+1):
            nelj = neljannes(n, y, x)
            kerr = kerros(n, y, x, nelj)
            alku = pyramidin_kerroksen_alku(n, nelj, kerr)
            leve = kerroksen_leveys(n, kerr)
            alko = alun_koordinaatit(n, nelj, kerr)
            luke = luku_kerroksessa(x, y, n, nelj, kerr)
            rivi.append(str(luke))
        print("\t".join(rivi))

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