티스토리 뷰
내가 i번 인덱스에 둔다는 것은 n-i개의 반전을 가질 수 있다는 말이다
물론 큰 수부터 둬야만 가능하다
시작점을 s 끝점을 e로 잡고
인덱스를 돌아가며 n-i개의 반전이 필요하면 e에있는 것을 놔주고
필요없다면 s에 있는것을 둔다
다 하고 k!=0 || s<=e라면 배열을 봤는데 만족못하거나
다 못본것이므로 -1이다
k값은 longlong이 될 수있으므로 주의하자!!
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long
ll n,k;
int ans[314166];
int main(){
scanf(" %lld %lld",&n,&k);
int s=1,e=n;
for(ll i=1;i<=n;i++){
if(k>=n-i){
k-=(n-i);
ans[i] = e--;
} else ans[i]=s++;
}
if((k!=0) || (s<=e)) puts("-1");
else for(int i=1;i<=n;i++) printf("%d ",ans[i]);
}
|
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 15988 1,2,3 더하기 3 (0) | 2020.01.24 |
---|---|
[백준] 15658 연산자 끼워넣기 (2) (0) | 2020.01.24 |
[백준] 17503 맥주 축제 (0) | 2019.11.08 |
[백준] 17499 수열과 시프트 쿼리 (0) | 2019.11.08 |
[백준] 17498 폴짝 게임 (0) | 2019.11.08 |
댓글