CSES - Datatähti 2022 alku - Results
Submission details
Task:Spiraali
Sender:valk
Submission time:2021-10-14 22:12:22 +0300
Language:C++17
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.01 s1details
#20.01 s2details
#3--3details

Code

// TaskCSpiral.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <map>
#include <string>

using namespace std;

int main()
{
    int size; //size
    int tests; //tests
    cin >> size;
    cin >> tests;

    for (int i = 0; i < tests; i++) {
        int x;
        int y;
        cin >> x;
        cin >> y;

        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 tArea = 0;

        for (int l = 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

        cout << to_string(tArea) << "\n";
    }

}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file

Test details

Test 1

Group: 1

Verdict:

input
10 100
1 1
1 2
1 3
1 4
...

correct output
1
36
35
34
33
...

user output
1
2
3
4
5
...

Test 2

Group: 2

Verdict:

input
1000 1000
371 263
915 322
946 880
53 738
...

correct output
773533
312166
206053
200080
593922
...

user output
775217
313352
206185
197870
594540
...

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)