Dashboard - Codeforces Round #851 (Div. 2) - Codeforces

 

codeforces.com

A, C 풀고 B 못 풀었습니다.

B도 막상 풀이 보니까 많이 아쉽도록 쉽네요.

 

 

Problem - A - Codeforces

 

codeforces.com

 

1, 2로 이루어진 배열에서 a1~ ak 까지의 곱과 a(k+1) ~ an까지의 곱이 같은 k 중, 가장 작은 k를 출력하면 됩니다.

 

풀이:

2의 총 개수가 홀수라면, k = -1.

2의 총 개수가 짝수라면, (2의 총 개수 / 2) 번째 2가 등장하는 위치가 정답입니다.

 

 

 

Problem - B - Codeforces

 

codeforces.com

 n = x + y 인 x와 y를 구해야합니다.

x 자릿수의 총합과 y 자릿수의 총합은 1을 초과해서 차이나면 안 됩니다.

 

풀이:

각 자릿수를 2로 나눠서 x와 y에 나눠주면 됩니다.

 

 

 

Problem - C - Codeforces

 

codeforces.com

풀이:

n이 짝수라면 알맞게 짝을 지어줄 수 없습니다.

n이 홀수일 때, n = 9일 때를 생각해서 한 번 짝을 지어봤습니다.

n = 9

↓

1  2  3  4  5  6  7  8  9
10 11 12 13 14 15 16 17 18

15 부터 23 까지의 합을 만들어야함.

↓

1 - 14
3 - 13
5 - 12
7 - 11
9 - 10
18 - 2
17 - 4
16 - 6
15 - 8

이렇게 되길래, 똑같이 작동하도록 짝을 지어주는 코드를 작성했고 AC를 받았습니다.

정말 오랜만에 코포 했는데 아쉽기도 하고,

여태 그리디 안 한 거 생각하면 다행이란 생각이 들기도 하네요.

https://codeforces.com/contest/1742

 

Problem - B - Codeforces

 

codeforces.com

n, k, r, c를 입력받고, r행 c열에는 X가 무조건 있다고 할 때, n x n의 배열의 한 점에서 가로 세로 k개 안에 X가 최소로 있어야합니다.

3 3 3 2 를 입력받았을 때 아래와 같은 경우의 수가 있겠죠.

 

그냥 constructive 하고 빠르게 생각나는대로 짰습니다.

#include <stdio.h>
int main() {
int n, k, r, c, t;
int arr[1003][1003] = {};
scanf("%d", &t);
while(t--) {
    scanf("%d%d%d%d", &n, &k, &r, &c);
    r %= k;
    c %= k;
    for(int q = 0; q <= n; q++) {
        for(int i = r + q; i <= n + k; i+=k) {
            for(int j = c + q; j <= n + k; j+= k) {
                arr[i][j] = 1;
            }
        }
    }
    for(int i = k; i < n + k; i++) {
        for(int j = k; j < n + k; j++) {
            if(arr[i][j] == 1) printf("X");
            else printf(".");
        }   
        printf("\n");
    }
    for(int i = 0; i <= n + k; i++) {
        for(int j = 0; j <= n + k; j++) {
            arr[i][j] = 0;
        }
    }
}
}

https://codeforces.com/contest/1706/problem/C

+ Recent posts