kar7mp5

[Codeforces] Codeforces Round 951 (Div. 2) A, C 풀이 본문

Problem Solving/Codeforces

[Codeforces] Codeforces Round 951 (Div. 2) A, C 풀이

kar7mp5 2024. 6. 7. 01:59
728x90

https://codeforces.com/contest/1979

[Dashboard - Codeforces Round 951 (Div. 2) - Codeforces

codeforces.com](https://codeforces.com/contest/1979)

A

인접한 두 개의 수 중 큰 수 - 1을 반복하여 가장 작은 값을 리턴하여 문제 풀이했습니다.

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
using vi = vector<int>;

int T;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> T;
    int N;
    while (T--) {
        vi v;

        cin >> N;
        for (int i = 0; i < N; ++i) {
            int x;
            cin >> x;
            v.push_back(x);
        }
        int result = 1000000001;
        for (int i = 0; i < v.size() - 1; ++i) {
            if (result > max(v[i], v[i + 1]) - 1) {
                result = max(v[i], v[i + 1]) - 1;
            }
        }
        cout << result << '\n';
    }
    return 0;
}

C

저는 B 번 문제 풀이가 떠오르지 않아 C 풀이를 먼저 진행했습니다.
문제는 최소공배수 개념으로 해결했습니다.

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
using vi = vector<int>;

ll gcd(ll a, ll b) {
    while (b != 0) {
        ll temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int lcm(ll a, ll b) { return (a * b) / gcd(a, b); }

ll lcmOfVector(const vector<int> &nums) {
    ll result = nums[0];
    for (size_t i = 1; i < nums.size(); ++i) {
        result = lcm(result, nums[i]);
    }
    return result;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int T;
    cin >> T;
    while (T--) {
        vi v;
        int N;
        cin >> N;

        for (int i = 0; i < N; ++i) {
            int x;
            cin >> x;
            v.push_back(x);
        }

        int total = 0;
        ll lcm = lcmOfVector(v);
        for (int i = 0; i < N; ++i) {
            total += lcm / v[i];
        }

        if (total < lcm) {
            for (int o : v) {
                cout << lcm / o << ' ';
            }
        } else {
            cout << "-1";
        }
        cout << '\n';
    }

    return 0;
}
728x90