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:59728x90
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
'Problem Solving > Codeforces' 카테고리의 다른 글
[Codeforces] Codeforces Round 951 (Div. 4) A, B, C, E 풀이 (0) | 2024.06.21 |
---|---|
[Codeforces] Codeforces Round 950 (Div. 3) A, B 풀이 (0) | 2024.06.04 |