티스토리 뷰

Dashboard - Codeforces Round #758 (Div.1 + Div. 2) - Codeforces

 

Dashboard - Codeforces Round #758 (Div.1 + Div. 2) - Codeforces

 

codeforces.com

 !!!! 모든 답은 제 풀이일 뿐 정해가 아닐 수 있습니다 !!!!

 

 

A. Find Array

Problem - A - Codeforces

 

Problem - A - Codeforces

 

codeforces.com

문제

주어진 조건을 만족하는 길이 n의 배열 a를 출력하는 문제

1.  1 <= a[i] <=10^9

2.  a[i] <a[i+1] < a[i+2]...

3. a[i] isn't divisible by a[i-1]

 

풀이

 

2~n+1까지 출력하면 된다.

 

 

코드

 

#include <bits/stdc++.h>
using namespace std;
int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++) {
            cout << i + 1 << ' ';
        }
        cout << '\n';
    }
}

 

 

B.  Build the Permutation

Problem - B - Codeforces

 

Problem - B - Codeforces

 

codeforces.com

 

문제

 

n , a, b가 주어졌을 때 주어진 조건에 맞는 Permutation을 구하는 문제

1. p[i-1] < p[i] > p[i+1] 인 원소가 a개

2. p[i-1] > p[i] < p[i+1] 인 원소가 b개

 

풀이

 

a와 b의 차이가 2이상이면 안되고, a+b가  n-2보다 크면 안된다. 이외에는 a>b, a==b, a<b 일때 맞춰 짝수칸 홀수칸에 높은숫자, 낮은숫자를 배치한다.

 

코드

 

#include <bits/stdc++.h>
using namespace std;
int ans[100001];
int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int T;
    cin >> T;
    while (T--) {
        int n, a, b;
        cin >> n >> a >> b;
        int dif = abs(a - b);
        if (a == 0 && b == 0) {
            for (int i = 1; i <= n; i++)cout << i << ' ';
            continue;
        }
        if (dif >= 2 || n==2) {
            cout << -1 << '\n';
            continue;
        }
        if ((a+b) > (n-2)) {
            cout << -1<<'\n';
            continue;
        }
        if (a > b) {
            int start = n;
            for (int i = 1; i <= a; i++) {
                ans[i * 2] = start--;
            }
            for (int i = 1; i <= a + 1; i++) {
                ans[i * 2 - 1] = start--;
            }
            for (int i = 2 * a + 2; i <= n; i++) {
                ans[i] = start--;
            }
        }
        else if (a == b) {
            int start = 1;
            for (int i = 1; i <= a + 1; i++) {
                ans[i * 2 - 1] = start++;
            }
            for (int i = 1; i <= a + 1; i++) {
                ans[i * 2] = start++;
            }
            for (int i = a * 2 + 3; i <= n; i++) {
                ans[i] = start++;
            }
        }
        else {
            int start = 1;
            for (int i = 1; i <= b; i++) {
                ans[i * 2] = start++;
            }
            for (int i = 1; i <= b + 1; i++) {
                ans[i * 2 - 1] = start++;
            }
            for (int i = 2 * b + 2; i <= n; i++) {
                ans[i] = start++;
            }
        }
        for (int i = 1; i <= n; i++)cout << ans[i] << ' ';
        cout << '\n';
    }
}

 

 

 

자세한 설명에 중점을 두기보다는 대회 기록에 중점을 둔 글입니다 !

틀린 부분은 감사히 지적받겠습니다.