아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

gMatrix (Small)

면접 대비

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

요약
주어진 식으로 행렬을 만들고 한 변이 K인 모든 연속 부분행렬의 최댓값을 합합니다.
난이도

쉬움10점 중 2점

유형
완전 탐색, 행렬, 구현
정답자
아직 제출이 없습니다

문제

크기가 N×NN \times N인 정사각 행렬 MM이 있다. MM의 원소는 모두 음이 아닌 정수이다. MM 안에 들어 있는 모든 K×KK \times K 부분 행렬마다 그 안의 최댓값을 하나씩 구한 다음, 구한 값을 전부 더한 결과를 구하려고 한다. 여기서 부분 행렬은 연속한 KK개의 행과 연속한 KK개의 열로 이루어진다. MM의 같은 칸이 여러 부분 행렬에서 동시에 최댓값이 될 수 있는데, 그런 칸은 최댓값이 된 횟수만큼 중복해서 더한다.

행렬을 그대로 입력받는 대신 길이가 NN인 두 배열 AA와 BB, 그리고 두 정수 CC와 XX가 주어진다. ii번째 행, jj번째 열의 원소는 Mij=(Ai×i+Bj×j+C) mod XM_{ij} = (A_i \times i + B_j \times j + C) \bmod X이다. 이때 ii와 jj는 모두 11 이상 NN 이하이다.

입력

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

각 테스트 케이스의 첫째 줄에는 네 정수 NN, KK, CC, XX가 공백으로 구분되어 주어진다. 둘째 줄에는 배열 AA의 원소 NN개가, 셋째 줄에는 배열 BB의 원소 NN개가 공백으로 구분되어 주어진다.

출력

각 테스트 케이스마다 한 줄에 Case #x: y 형식으로 출력한다. xx는 11부터 시작하는 테스트 케이스 번호이고, yy는 모든 K×KK \times K 부분 행렬의 최댓값을 더한 값이다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤N≤501 \le N \le 50
  • 1≤K≤N1 \le K \le N
  • 1≤Ai,Bi≤1000001 \le A_i, B_i \le 100000
  • 1≤C≤1000001 \le C \le 100000
  • 1≤X≤10000000071 \le X \le 1000000007

힌트

첫 번째 테스트 데이터의 세 번째 테스트 케이스는 N=3N = 3, K=2K = 2, C=3C = 3, X=109X = 109, A=(6,4,3)A = (6, 4, 3), B=(2,1,5)B = (2, 1, 5)이므로 행렬은 다음과 같다.

11 11 24
13 13 26
14 14 27

2×22 \times 2 부분 행렬은 네 개이고 각각의 최댓값은 1313, 2626, 1414, 2727이므로 답은 8080이다.

예제2

  1. 예제 1

    입력
    3
    1 1 1 5
    1
    1
    2 1 5 11
    1 2
    3 4
    3 2 3 109
    6 4 3
    2 1 5
    
    예상 출력
    Case #1: 3
    Case #2: 19
    Case #3: 80
    
  2. 예제 2

    입력
    1
    1 1 1 1000000007
    1
    1
    
    예상 출력
    Case #1: 3