만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

최장 공통 부분 수열

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

요약
모듈러 점화식으로 생성된 두 정수 수열의 최장 공통 부분수열 길이를 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 비트 연산, 배열
정답자
아직 제출이 없습니다

문제

길이가 nn인 수열 ss와 길이가 mm인 수열 tt가 주어진다. ss와 tt의 최장 공통 부분 수열의 길이를 구하라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 첫 줄에는 테스트 케이스의 개수 TT (1≤T≤1031\le T\le 10^3)가 주어진다.

각 테스트 케이스는 다음과 같다.

한 줄에 일곱 개의 정수 nn, mm, pp, xx, aa, bb, cc가 주어진다 (1≤n,m≤1061 \le n, m \le 10^6, 0≤x,a,b,c<p≤1090 \le x, a, b, c < p\le 10^9). 여기서 nn은 ss의 길이이고, mm은 tt의 길이이다.

입력 크기를 줄이기 위해 수열은 다음과 같이 생성한다.

i=1,2,…,ni = 1, 2, \ldots, n의 순서대로 xx를 (ax2+bx+c) mod p(a x^2 + b x + c) \bmod p로 갱신하고, 그 값을 s_is\_i로 둔다. 이어서 i=1,2,…,mi = 1, 2, \ldots, m의 순서대로 xx를 (ax2+bx+c) mod p(a x^2 + b x + c) \bmod p로 갱신하고, 그 값을 t_it\_i로 둔다.

모든 테스트 케이스에 걸친 nn의 합과 mm의 합은 각각 10610^6을 넘지 않는다고 보장된다.

출력

각 테스트 케이스마다 ss와 tt의 최장 공통 부분 수열의 길이를 한 줄에 정수 하나로 출력한다.

힌트

첫 번째 샘플에서 s=\[3,13,183,905]s=\[3,13,183,905]이고 t=\[731,565,303]t=\[731,565,303]이다.

두 번째 샘플에서 s=\[0,0,0]s=\[0,0,0]이고 t=\[0,0,0,0]t=\[0,0,0,0]이다.

예제1

  1. 예제 1

    입력
    2
    4 3 1024 1 1 1 1
    3 4 1024 0 0 0 0
    
    예상 출력
    0
    3