마법의 도넛 게임

시간 제한2초메모리 제한512 MB

요약
기준 칸이 회전하고 보드가 뒤집히는 원형 배열에서 기준 칸부터 이어지는 구간에 값을 더하고 구간 합을 구해 1e9+7로 나눈 나머지를 출력한다.
난이도

보통10점 중 7점

유형
배열, 누적 합, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

Albert는 균등한 크기의 NN 개의 칸으로 구성된 도넛 모양의 게임 보드를 이용한 마법의 도넛 게임 놀이를 즐겨한다.

우선 도넛 모양의 게임 보드의 칸 중 하나를 "기준 칸"으로 삼아 12시 방향에 놓이도록 한 후, 각 칸에는 시계 방향 순으로 V_1,V_2,…,V_NV\_1, V\_2, \dots, V\_N 의 정수 값을 적어넣는다. 예를 들어 아래 그림은 N=7,V=\[2,0,2,4,9,9,9]N = 7, V = \[2, 0, 2, 4, 9, 9, 9] 인 경우를 나타내며 "기준 칸"은 화살표로 강조되어있다.

이후, 지시 사항이 적힌 카드 MM 장을 순서대로 뽑아 카드에 적힌 지시 사항을 수행한다 - 각 카드에는 3개의 정수가 적혀있는데, 편의상 ii 번째 카드에 적힌 3개의 정수를 순서대로 S_i,X_i,Y_iS\_i, X\_i, Y\_i 라 하자. 총 다섯 종류의 지시 사항이 있으며, 각 카드에 적힌 첫 번째 정수 (S_iS\_i)의 값이 지시 사항의 내용을 결정한다 (즉, S_i∈1,2,3,4,5S\_i \in \\{1, 2, 3,4, 5\\}).

  • 11 X_iX\_i 00 : 게임 보드를 반시계 방향으로 X_iX\_i 칸만큼 돌린다. 이 경우 항상 Y_i=0Y\_i = 0 이 적혀있다.
  • 22 X_iX\_i 00 : 게임 보드를 시계 방향으로 X_iX\_i 칸만큼 돌린다. 이 경우 항상 Y_i=0Y\_i = 0 이 적혀있다.
  • 33 00 00 : 게임 보드를 12시-6시 축을 기준으로 뒤집는다. 이 경우 항상 X_i=Y_i=0X\_i = Y\_i = 0 이 적혀있다.
  • 44 X_iX\_i Y_iY\_i : 게임 보드의 기준칸부터 시작하여 시계 방향으로 총 X_iX\_i 개의 칸에 적힌 값을 각각 Y_iY\_i 씩 증가시킨다.
  • 55 X_iX\_i 00 : 게임 보드의 기준칸부터 시작하여 시계 방향으로 총 X_iX\_i 개의 칸에 적힌 값을 모두 더하여 메모지에 기록한다 (메모지에 jj 번째로 적은 값을 O_jO\_j 라 하자).

예를 들어 M=9M = 9 이고 S=\[1,4,5,5,3,5,2,4,5]S = \[1, 4, 5, 5, 3, 5, 2, 4, 5], X=\[2,4,3,5,0,3,2,4,3]X = \[2, 4, 3, 5, 0, 3, 2, 4, 3], Y=\[0,3,0,0,0,0,0,2,0]Y = \[0, 3, 0, 0, 0, 0, 0, 2, 0] 이라 하자.

게임 보드 상태설명
게임을 시작할 때의 게임 보드 상태이다.화살표로 표시된 칸이 "기준칸" 현재 시점의 기준칸이다.
1번 카드를 뽑은 후 게임 보드를 반시계 방향으로 2칸 돌린 이후의 게임 보드 상태이다.
2번 카드를 뽑은 후 4개의 칸에 각각 3씩 더한 이후의 게임 보드 상태이다.
3번 카드를 뽑아 총 3개의 칸에 적힌 값을 모두 더하면 5+7+12=245 + 7 + 12 = 24가 되므로 O_1=24O\_1 = 24 이다.게임 보드의 상태는 변화가 없다.
4번 카드를 뽑아 총 5개의 칸에 적힌 값을 모두 더하면 5+7+12+12+9=455 + 7 + 12 + 12 + 9= 45가 되므로 O_2=45O\_2 = 45 이다.게임 보드의 상태는 변화가 없다.
5번 카드를 뽑아 게임 보드를 뒤집은 이후의 게임 보드 상태이다. 12시 방향을 가리키는 기준칸은 위치가 변하지 않음에 유의하자.
6번 카드를 뽑아 총 3개의 칸에 적힌 값을 모두 더하면 5+0+2=75 + 0 + 2 = 7이 되므로 O_3=7O\_3 = 7 이다.게임 보드의 상태는 변화가 없다.
7번 카드를 뽑은 후 게임 보드를 시계 방향으로 2칸 돌린 이후의 게임 보드 상태이다.
8번 카드를 뽑은 후 4개의 칸에 각각 2씩 더한 이후의 게임 보드 상태이다.
9번 카드를 뽑아 총 3개의 칸에 적힌 값을 모두 더하면 14+9+7=3014 + 9 + 7 = 30이 되므로 O_4=30O\_4 = 30 이다.게임 보드의 상태는 변화가 없다.

이 때 5번 종류의 지시사항이 적힌 카드는 총 4장이므로 O=\[24,45,7,30]O = \[24, 45, 7, 30] 가 된다.

입력으로 N,M,V,S,X,YN, M, V, S, X, Y 값이 주어졌을 때, 위 놀이를 마친 후 메모지에 적힌 값들을 구해보자 (즉, O_1,O_2,…O\_1, O\_2, \dots 값을 구하면 된다).

입력

입력 첫 줄에 테스트 케이스의 수 TT 가 주어진다.

각 테스트의 첫 줄에는 N,MN, M이 공백으로 구분되어 주어진다. 둘째 줄에는 배열 VV 의 원소인 NN 개의 정수가 공백으로 구분되어 주어진다. 셋째 줄에는 배열 SS 의 원소인 MM 개의 정수가 공백으로 구분되어 주어진다. 넷째 줄에는 배열 XX 의 원소인 MM 개의 정수가 공백으로 구분되어 주어진다. 다섯째 줄에는 배열 YY 의 원소인 MM 개의 정수가 공백으로 구분되어 주어진다.

출력

각 테스트 케이스의 정답이 되는 배열 OO 의 값을 공백으로 구분하여 각 줄에 출력한다. 단, 이 값이 매우 커질 수 있으므로 OO 의 각 원소를 109+710^9 + 7 로 나눈 나머지를 출력한다.

제한

  • 1≤T≤101 \le T \le 10

  • 3≤N≤250,0003 \le N \le 250,000

  • 3≤M≤123,4563 \le M \le 123,456

  • 1≤i≤N1 \le i \le N 인 각 ii에 대하여: 0≤V_i≤1090 \le V\_i \le 10^9

  • 1≤j≤M1 \le j \le M 인 각 jj에 대하여:

    • S_j∈1,2,3,4,5S\_j \in \\{1, 2, 3, 4, 5\\}
    • S_j=3S\_j = 3 인 경우 X_j=0X\_j = 0 이고, S_j≠3S\_j \neq 3 인 경우 1≤X_j≤N1 \le X\_j \le N
    • S_j≠4S\_j \neq 4 인 경우 Y_j=0Y\_j = 0 이고, S_j=4S\_j = 4 인 경우 1≤Y_j≤1091 \le Y\_j \le 10^9
  • 1≤V_i≤1091 \le V\_i \le 10^9

  • 입력으로 주어진 배열 SS 에서 최소 1개의 원소는 S_j=5S\_j = 5 임이 보장된다 - 즉, 출력해야 하는 배열 OO 가 비어있는 경우는 입력으로 주어지지 않는다.

예제1

  1. 예제 1

    입력
    3
    7 9
    2 0 2 4 9 9 9
    1 4 5 5 3 5 2 4 5
    2 4 3 5 0 3 2 4 3
    0 3 0 0 0 0 0 2 0
    6 9
    2 0 2 4 0 0
    1 4 5 5 3 5 2 4 5
    2 4 3 5 0 3 2 4 3
    0 3 0 0 0 0 0 2 0
    6 5
    3 1 4 1 5 9
    1 2 3 4 5
    1 3 0 4 4
    0 0 0 1 0
    
    예상 출력
    24 45 7 30
    15 20 7 21
    15