티스토리 뷰
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
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
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';
}
}
자세한 설명에 중점을 두기보다는 대회 기록에 중점을 둔 글입니다 !
틀린 부분은 감사히 지적받겠습니다.