알고리즘/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("");
}