Strong Root

문제를 보시려면 여기를 클릭


이하는 코드입니다.


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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdio.h>
 
#pragma warning(disable:4996)
 
typedef struct {
    int value;
    int count;
} Cache;
 
int main() {
    int T;
    scanf("%d\n", &T);
 
    for (int i = 0; i < T; i++) {
        // init cache
        Cache xCache[2], yCache[2];
        for (int j = 0; j < 2; j++) {
            xCache[j].value = yCache[j].value = xCache[j].count = yCache[j].count = 0;
        }
 
        for (int j = 0; j < 3; j++) {
            int x, y;
            scanf("%d %d", &x, &y);
 
            /* x */
            // if empty
            if (xCache[0].count == 0) {
                xCache[0].value = x;
                xCache[0].count++;
            }
 
            // if full
            else if (xCache[0].value == x) {
                xCache[0].count++;
            }
            else if (xCache[1].value == x) {
                xCache[1].count++;
            }
 
            // if half empty
            else {
                xCache[1].value = x;
                xCache[1].count++;
            }
 
            /* y */
            // if empty
            if (yCache[0].count == 0) {
                yCache[0].value = y;
                yCache[0].count++;
            }
 
            // if full
            else if (yCache[0].value == y) {
                yCache[0].count++;
            }
            else if (yCache[1].value == y) {
                yCache[1].count++;
            }
 
            // if half empty
            else {
                yCache[1].value = y;
                yCache[1].count++;
            }
        }
 
        // print x
        for (int j = 0; j < 2; j++) {
            if (xCache[j].count == 1) {
                printf("%d ", xCache[j].value);
                break;
            }
        }
 
        // print y
        for (int j = 0; j < 2; j++) {
            if (yCache[j].count == 1) {
                printf("%d\n", yCache[j].value);
                break;
            }
        }
    }
 
    return 0;
}
cs

문제를 보시려면 여기를 클릭



틀리기 쉬운 입출력 예제

입력

출력 

7

4

1 2 3 4

3

-1 0 1

8

1 2 3 2 1 2 3 2

6

4 50 2 -10 2 4

4

-5 2 3 -2

4

-1 -2 -3 -4

6

2 3 -4 -1 -1 6

10

1

16

56

5

0

6



이하는 코드입니다.


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
#include <stdio.h>
 
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
 
#pragma warning(disable:4996)
 
int main() {
    int T;
    scanf("%d\n", &T);
 
    for (int i = 0; i < T; i++) {
        int N;
        scanf("%d", &N);
 
        int inputNum;
        int maxPartialSum = 0;
        int partialSum = 0;
        for (int j = 0; j < N; j++) {
            scanf("%d", &inputNum);
            partialSum += inputNum;
            if (partialSum < 0) {
                partialSum = 0;
                continue;
            }
            maxPartialSum = MAX(maxPartialSum, partialSum);
        }
 
        printf("%d\n", maxPartialSum);
    }
 
    return 0;
}
cs

문제를 보시려면 여기를 클릭


이하는 코드입니다.


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
58
#include <stdio.h>
#include <queue>
 
#pragma warning(disable:4996)
 
using namespace std;
 
struct MaxCompare {
    bool operator() (const int left, const int right) {
        return left < right;
    }
};
 
int main() {
    int C;
    scanf("%d\n", &C);
 
    for (int i = 0; i < C; i++) {
        int N;
        scanf("%d", &N);
 
        priority_queue<int, vector<int>, MaxCompare> maxHeap_enemy;
        for (int j = 0; j < N; j++) {
            int *enemyRating = new int;
            scanf("%d", enemyRating);
            maxHeap_enemy.push(*enemyRating);
        }
 
        priority_queue<int, vector<int>, MaxCompare> maxHeap_korea;
        for (int j = 0; j < N; j++) {
            int *koreanRating = new int;
            scanf("%d", koreanRating);
            maxHeap_korea.push(*koreanRating);
        }
 
        int winCount = 0;
        while (true) {
            if (maxHeap_enemy.size() < 1) {
                break;
            }
 
            // cannot defeat
            if (maxHeap_enemy.top() > maxHeap_korea.top()) {
                maxHeap_enemy.pop();
                continue;
            }
 
            // can defeat
            winCount++;
            maxHeap_enemy.pop();
            maxHeap_korea.pop();
        }
 
        printf("%d\n", winCount);
    }
 
    return 0;
}
cs

문제를 보시려면 여기를 클릭


이하는 코드입니다.


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
#include <stdio.h>
 
#pragma warning(disable:4996)
 
long long N, M;
 
int getWinNum() {
    int goal = (M * 100) / N + 1;    // 엄청 중요한 문장. 이 문장 때문에 2시간을 허비함.
    if (goal > 99) {
        return -1;
    }
 
    double ret =  (double)(goal * N - 100 * M) / (100 - goal);
    int flooredRet = (int)ret;
    if ((ret - flooredRet) > 0.0) {
        return flooredRet + 1;
    }
    return flooredRet;
}
 
int main() {
    int C;
    scanf("%d\n", &C);
 
    for (int i = 0; i < C; i++) {
        int tmpN, tmpM;
        scanf("%d %d", &tmpN, &tmpM);
        N = tmpN;
        M = tmpM;
        printf("%d\n", getWinNum());
    }
 
    return 0;
}
cs

문제를 보시려면 여기를 클릭


이하는 코드입니다.


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
#include <stdio.h>
 
#pragma warning(disable:4996)
 
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
 
int N, L;
double board[1001];
double cache[1001];
 
double getMinAverage() {
    double minAverage = 100.0;
 
    for (int i = 0; i <= N - L; i++) {
        double sum = 0.0;
        for (int j = i; j < i + L - 1; j++) {
            sum += board[j];
        }
 
        cache[i] = 100.0;
        for (int j = i + L - 1; j < N; j++) {
            sum += board[j];
            double partialAverage = sum / (j - i + 1);
            cache[i] = MIN(cache[i], partialAverage);
        }
        minAverage = MIN(minAverage, cache[i]);
    }
 
    return minAverage;
}
 
int main() {
    int C;
    scanf("%d\n", &C);
 
    for (int i = 0; i < C; i++) {
        scanf("%d %d", &N, &L);
        for (int j = 0; j < N; j++) {
            scanf("%lf", &board[j]);
        }
        printf("%.11f\n", getMinAverage());
    }
 
    return 0;
}
cs

난이도 ☆☆☆☆☆


문제를 보시려면 여기를 클릭


이하는 코드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string>
#include <iostream>
 
#pragma warning(disable:4996)
 
using namespace std;
 
int main() {
    int C;
    scanf("%d\n", &C);
 
    for (int i = 0; i < C; i++) {
        string input;
        getline(cin, input);
 
        cout << "Hello, " << input << "!" << endl;
    }
 
    return 0;
}
cs

문제를 보시려면 여기를 클릭


이하는 코드입니다.


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
#include <stdio.h>
#include <string.h>
 
#pragma warning(disable:4996)
 
#define NO 0
#define YES 1
 
int cache[101][101];
int board[101][101];
int n;
 
int canReach(int y, int x) {
    if ((y > n - 1) || (x > n - 1)) {
        return NO;
    }
 
    int& ret = cache[y][x];
    if (ret != -1) {
        return ret;
    }
 
    int amount = board[y][x];
    return ret = (canReach(y + amount, x) || canReach(y, x + amount));
}
 
int main() {
    int C;
    scanf("%d", &C);
 
    for (int i = 0; i < C; i++) {
        scanf("%d", &n);
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
                scanf("%d", &board[j][k]);
            }
        }
 
        memset(cache, -1sizeof(cache));
        cache[n - 1][n - 1] = YES;
        int ret = canReach(00);
        if (ret == YES) {
            printf("YES\n");
        }
        else {
            printf("NO\n");
        }
    }
 
    return 0;
}
cs

문제를 보시려면 여기를 클릭


이하는 코드입니다.


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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <stdio.h>
 
#pragma warning(disable:4996)
 
typedef struct Person {
    int id;
    struct Person *next;
} Person;
 
typedef struct {
    Person *last;
    Person *beforeTarget;
    int size;
} List;
 
List *list;
int N, K;
 
void pushBack(int id) {
    Person *newPerson = new Person;
    newPerson->id = id;
    
    if (list->size == 0) {
        newPerson->next = NULL;
    }
    else if (list->size == 1) {
        newPerson->next = list->last;
        list->last->next = newPerson;
    }
    else {
        // new person -> first
        Person *first = list->last->next;
        newPerson->next = first;
 
        // old last -> new person
        list->last->next = newPerson;
    }
 
    // new last = new person
    list->last = newPerson;
 
    list->size++;
}
 
void killTarget() {
    if (list->size <= 2) {
        return;
    }
 
    Person *target = list->beforeTarget->next;
    
    // before target -> target's next
    list->beforeTarget->next = target->next;
 
    // set list's beforeTarget
    Person *temp = list->beforeTarget;
    for (int i = 0; i < K - 1; i++) {
        temp = temp->next;
    }
    list->beforeTarget = temp;
 
    // remove target
    delete(target);
    list->size--;
 
    // recursive call
    killTarget();
}
 
int main() {
    int C;
    scanf("%d", &C);
 
    for (int i = 0; i < C; i++) {
        scanf("%d %d", &N, &K);
 
        list = new List;
        list->size = 0;
        
        for (int j = 0; j < N; j++) {
            pushBack(j + 1);
        }
 
        list->beforeTarget = list->last;
        killTarget();
 
        int id1 = list->beforeTarget->id;
        int id2 = list->beforeTarget->next->id;
 
        if (id1 < id2) {
            printf("%d %d\n", id1, id2);
        }
        else {
            printf("%d %d\n", id2, id1);
        }
 
        delete(list);
    }
 
    return 0;
}
cs