Queen's Attack 2 : Chess game code

Study/알고리즘2019.01.10 18:49

Sample Input 1

5 3
4 3
5 5
4 2
2 3

Sample Output 1

10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
int main(){
    int n;
    int k;
    cin >> n >> k;
    int rQueen;
    int cQueen;
    cin >> rQueen >> cQueen;
    
    // distance to edges 
    int tSpan = n-rQueen;
    int lSpan = cQueen-1;
    int bSpan = rQueen-1
    int rSpan = n-cQueen; 
    // distance to corners
    int blSpan = min (cQueen, rQueen) -1
    int brSpan = min (rQueen-1, n-cQueen);
    int tlSpan = min (n-rQueen, abs(1-cQueen));
    int trSpan = n - max(cQueen, rQueen);
    
    for(int a0 = 0; a0 < k; a0++){
        int rObstacle;
        int cObstacle;
        cin >> rObstacle >> cObstacle;
        if (rObstacle == rQueen) // in the same row
        {
            if (cObstacle > cQueen)
                rSpan = min (rSpan, cObstacle-cQueen-1); 
            if (cObstacle < cQueen)
                lSpan = min (lSpan, cQueen-cObstacle-1); 
        }
        if (cObstacle == cQueen) // in the same column
        {
            if (rObstacle > rQueen) 
                tSpan = min (tSpan, rObstacle-rQueen-1);
            if (rObstacle < rQueen)
                bSpan = min (bSpan, rQueen-rObstacle-1);
        }
        if (abs(cQueen-cObstacle) == abs(rQueen-rObstacle)) // in the same diagonal
        {
            if  (rObstacle > rQueen){ // Higher part. 
                if  (cObstacle < cQueen) // left
                    tlSpan = min(tlSpan, rObstacle-rQueen-1);
                if  (cObstacle > cQueen) // right
                    trSpan = min(trSpan, cObstacle-cQueen-1);
            }        
            if  (rObstacle < rQueen){ // Lower part
                if  (cObstacle < cQueen) // left
                    blSpan = min(blSpan, cQueen-cObstacle-1);               
                if  (cObstacle > cQueen) // right
                    brSpan = min(brSpan, cObstacle-cQueen-1);              
          }
        }
    }
 
    cout << tSpan+rSpan+bSpan+lSpan+blSpan+brSpan+trSpan+tlSpan; 
    return 0;
}
cs


작성자

Posted by 비타오백

관련 글

댓글 영역

티스토리 툴바