문제 링크: https://www.hackerrank.com/challenges/absolute-permutation/problem
i번째 인덱스에 i-k를 넣어보고, 안되면 i+k를 넣습니다. 넣을 때는 \(i \pm k \in [1, n]\) 이어야 하고, \(i \pm k\)가 앞에서 사용되지 않았어야 합니다. 중간에 넣지 못하는 경우가 생기면 수열을 못만드는 것입니다.
#pragma GCC optimize ("Ofast")
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
vector<bool> used(n);
vector<int> ans;
bool flag = true;
for (int i = 1; i <= n && flag; ++i) {
if (i-k>0 && i-k<=n && !used[i-k-1]) {
ans.push_back(i - k);
used[i-k-1] = true;
}
else if (i+k>0 && i+k<=n && !used[i+k-1]) {
ans.push_back(i + k);
used[i+k-1] = true;
}
else {
flag = false;
}
}
if (flag) {
for (auto& c : ans)
cout << c << ' ';
cout << '\n';
}
else {
cout << -1 << '\n';
}
}
return 0;
}
반응형
'Online Judge > Hackerrank' 카테고리의 다른 글
[Hackerrank][C++] Queen's Attack II (0) | 2020.06.17 |
---|---|
[Hackerrank][C++] Non-Divisible Subset (0) | 2020.06.07 |
[Hackerrank][C++] Equal (2) | 2020.05.26 |