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

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

수열과 변환

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

요약
1 이상 m 이하의 값을 갖는 길이 n 수열 중에서, 최솟값을 이용한 변환을 k번 적용한 결과의 최댓값과 최솟값의 차가 주어진 값과 같은 수열의 개수를 센다.
난이도

어려움10점 중 9점

유형
조합론, 수학, 동적 계획법, 구현
정답자
아직 제출이 없습니다

문제

크기가 nn인 수열 a1,a2,…,ana_1, a_2, \ldots, a_n에 변환 연산을 적용한다. 변환 연산은 두 단계로 이루어진다. 먼저 새 수열 b1,b2,…,bnb_1, b_2, \ldots, b_n을 다음 식으로 만든다.

bi=(min⁡j=1naj)−ai+∑j=1naj(1≤i≤n)b_i = \left(\min_{j=1}^{n} a_j\right) - a_i + \sum_{j=1}^{n} a_j \quad (1 \le i \le n)

그다음 수열 aa를 수열 bb로 바꾼다. 즉 모든 1≤i≤n1 \le i \le n에 대해 aia_i의 값을 bib_i로 바꾼다.

길이가 nn인 수열 xx에 대해 q(x)=max⁡i=1nxi−min⁡i=1nxiq(x) = \max_{i=1}^{n} x_i - \min_{i=1}^{n} x_i로 정의한다.

수열 rr은 어떤 수열에 변환 연산을 kk번 적용한 결과이고, q(r)q(r)의 값과 kk를 알고 있다. 이때 다음 두 조건을 모두 만족하는 수열 c1,c2,…,cnc_1, c_2, \ldots, c_n의 개수를 구하는 프로그램을 작성하시오.

  1. 모든 1≤i≤n1 \le i \le n에 대해 1≤ci≤m1 \le c_i \le m이다.
  2. q(d)=q(r)q(d) = q(r)이다. 여기서 dd는 수열 cc에 변환 연산을 kk번 적용한 수열이다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다 (1≤T≤100001 \le T \le 10000).

각 테스트 케이스는 한 줄로 이루어지며, 네 정수 nn, mm, q(r)q(r), kk가 공백으로 구분되어 주어진다 (1≤n,m,q(r),k≤1091 \le n, m, q(r), k \le 10^9).

출력

각 테스트 케이스마다 정답을 109+710^9 + 7로 나눈 나머지를 한 줄에 출력한다.

예제6

  1. 예제 1

    입력
    3
    1 1 1 1
    2 2 1 1
    2 3 1 1
    
    예상 출력
    0
    2
    4
    
  2. 예제 2

    입력
    5
    1 1000000000 1 1
    1 5 4 1000000000
    1 1 1000000000 1000000000
    1 2 1 7
    1 1000000000 999999999 3
    
    예상 출력
    0
    0
    0
    0
    0
    
  3. 예제 3

    입력
    6
    2 1 1 1
    3 5 5 2
    4 5 9 1
    10 1000000000 1000000000 5
    2 2 2 2
    7 1 1000000000 1
    
    예상 출력
    0
    0
    0
    0
    0
    0
    
  4. 예제 4

    입력
    5
    3 3 2 5
    3 4 2 1
    4 4 3 2
    5 6 4 3
    2 3 2 9
    
    예상 출력
    12
    24
    110
    2640
    2
    
  5. 예제 5

    입력
    4
    2 10 1 2
    3 10 1 3
    4 10 1 4
    5 10 1 5
    
    예상 출력
    18
    54
    126
    270
    
  6. 예제 6

    입력
    4
    1000000000 1000000000 1 1000000000
    1000000000 1000000000 999999999 1000000000
    1000000000 1000000000 999999998 1
    999999999 1000000000 500000000 1000000000
    
    예상 출력
    875000022
    262865814
    256244787
    379452699