CSES - Datatähti 2022 alku - Results
Submission details
Task:Spiraali
Sender:valk
Submission time:2021-10-14 10:57:03 +0300
Language:Java
Status:READY
Result:35
Feedback
groupverdictscore
#1ACCEPTED15
#2ACCEPTED20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.15 s1details
#2ACCEPTED0.24 s2details
#3--3details

Code


import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) { //remove comments before upload
        Scanner input = new Scanner(System.in);
        
        int size = input.nextInt(); //size
        int tests = input.nextInt(); //tests
        
        for(int i = 0; i < tests; i++) {
        	int y = input.nextInt();
        	int x = input.nextInt();
        	
        	int layer = 0;
        	
        	if(x > y && y <= size/2 && x+y-1<size) {
        		layer = y;
        	} else if(x <= size/2 && size-y >= x){
        		layer = x;
        	} else if (x > y) {
        		layer = x;
        	}else {
        		layer = y;
        	}

        	//System.out.println("og layer " + layer);
        	
        	if(layer > size/2) layer = size/2-(layer-size/2)+1;
        	
        	int width = (size-(layer-1)*2);
        	//System.out.println("width " + width + " layer " + layer);
        	
        	int result = 0;
        	
        	int tArea = 0;
        	
        	for(int l = 0+1; l < layer; l++) {
        		tArea += (size-(layer-1-l)*2)*4-4;
        	}
        	
        	if(x == layer) { //left d
        		tArea += width;
        		tArea -= width-(y-(layer-1));
        		//System.out.println("left");
        	}else if(x == size-layer+1 && x != y) {//right d
            	tArea += width*3-1;
            	tArea -= layer-1;
        		tArea -= y-(layer-1)*2;
        		//System.out.println("right");
        	}else if(y == layer) {//top d
        		tArea += width*4-2;
        		tArea -= x-(layer-1)*2;
        		tArea -= layer-1;
        		//System.out.println("top");
        	}else if(y == size-layer+1) {//bottom d
        		tArea -= width-(x-(layer-1));
        		tArea += width*2-1;
        		//System.out.println("bottom");
        	}
        	
        	//current layer = lower of x or y
        	//layer width = (size-(layer-1)*2)
        	//layer area = (size-(layer-1)*2)*4-4
        	//go through earlier spirals to get total
        	//then remove extra that hasnt been reached yet
        	
        	System.out.println(tArea);
        }
        input.close();
    }
	
}

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)