알고리즘/BOJ
[백준] 17499 수열과 시프트 쿼리
세진짱
2019. 11. 8. 14:28
거꾸로 생각하면 쉽게 풀 수 있다
시프트게 전체가 되므로 그냥 시작점을 옮겨보면 된다
시작점을 기준으로 k칸 뒤에 값을 더해주면 되고
오른쪽 왼쪽 시프트를 할때는 시작점을 움직여보자!
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long
int n,q,s;
ll arr[200020];
int main(){
cin>>n>>q;
for(int i=0;i<n;i++) cin>>arr[i];
for(int i=0;i<q;i++){
int x; cin>>x;
int a,b;
if(x==1){
cin>>a>>b; a--;
arr[(s+a)%n]+=b;
} else if(x==2){
cin>>a;
s = (s+n-a)%n;
} else {
cin>>a;
s = (s+a)%n;
}
}
for(int i=0;i<n;i++) printf("%d ",arr[(s+i)%n]); puts("");
}
|