CSES - Datatähti 2022 alku - Results
Submission details
Task:Spiraali
Sender:Lexa_ft
Submission time:2021-10-09 21:15:30 +0300
Language:Python3 (PyPy3)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED15
#2ACCEPTED20
#3ACCEPTED65
Test results
testverdicttimegroup
#1ACCEPTED0.04 s1details
#2ACCEPTED0.08 s2details
#3ACCEPTED0.08 s3details

Code

#Spiraalin dimensiot ja testien  määrä
rawin=input().split(" ")
n=int(rawin[0])
t=int(rawin[1])

#Seuraavia arvoja tarvitaan usein, joten tehdään niistä vakiot
hn=int(n/2) #puolet spiraalin leveydestä ja korkeudesta
ma=n**2 #spiraalin suurin arvo

#Vastausten tallennus
ans=[]


#Loop jonka jokaisella kierroksella lasketaan annettujen koordiaattien arvo
for i in range(t):
    #Koordinaatit
    rawin=input().split(" ")
    y=int(rawin[0])
    x=int(rawin[1])


    #Onko haettu arvo ensimmäisessä sarakkeessa
    if(x==1):
        ans.append(y)

    #Onko haettu arvo viimeisessä sarakkeessa
    elif(y==n):
        ans.append(n+x-1)
    #Edelliset tarkistukset voitaisiin laittaa seuraavista, mutta,
    #koska laskut ovat monivaiheiset, on nämä parempi tehdä omilla 

    #Onko piste käyrällä y=-x+n tai sen alapuolella
    elif(x<n-y+2): 
        #Onko piste käyrän y=x alapuolella ja päätetään,
        #mitä spiraalin sisäistä kulmaa käytetään laskujen tekoon
        if(y<=x-1):
            corn=hn-y-1

        #Vastatilanne
        else:

            corn=hn-x

        #Jos haetaan pistettä (n+1, n), neq on väärin
        if(corn==-1):
            neq=0
        #Lasketaan neq arvo nspiren ja geogebran avulla lasketulla kaavalla
        else:
            neq=(corn**2+corn*2+1)*4


        #Lasketaan vertailukulman arvo ja siitä heatun pisteen arvo
        ans.append(ma-neq-x+y+1)


    #Onko piste käyrän y=-x+n yläpuolella
    else:
        #Onko piste käyrän y=x yläpuolella
        if(y>=x):
            corn=y-hn-1

        #Vastatilanne
        else:

            corn=x-hn-1

        #Lasketaan neq arvo nspiren ja geogebran avulla lasketulla kaavalla
        neq=(corn**2+corn)*4

        #Lasketaan vertailukulman arvo ja siitä heatun pisteen arvo
        #Lasku on oikeasti muotoa ma-neq-(y-hn)+(x-hn-1)
        ans.append(ma-neq-y+x-1)     

#Tulostetaan arvot
for a in ans:
    print(a)

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

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

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