Codeforces Round 834 (Div. 3) F

72 阅读1分钟

A positive number x of length n in base p (2≤p≤109) is written on the blackboard. The number x is given as a sequence a1,a2,…,an (0≤ai<p) — the digits of x in order from left to right (most significant to least significant).

Dmitry is very fond of all the digits of this number system, so he wants to see each of them at least once.

In one operation, he can:

  • take any number x written on the board, increase it by 1, and write the new value x+1 on the board.

For example, p=5 and x=2345.

  • Initially, the board contains the digits 2, 3 and 4;
  • Dmitry increases the number 2345 by 11 and writes down the number 2405. On the board there are digits 0,2,3,4;
  • Dmitry increases the number 2405 by 1 and writes down the number 2415. Now the board contains all the digits from 0 to 4.

Your task is to determine the minimum number of operations required to make all the digits from 0 to p−1 appear on the board at least once.

Input

The first line of the input contains a single integer t (1≤t≤2⋅103) — the number of test cases. The descriptions of the input test cases follow.

The first line of description of each test case contains two integers n (1≤n≤100) and p (2≤p≤109) — the length of the number and the base of the number system.

The second line of the description of each test case contains n integers a1,a2,…,an (0≤ai<p0) — digits of x in number system with base p

It is guaranteed that the number x does not contain leading zeros (that is, a1>0).

Output

For each test case print a single integer — the minimum number of operations required for Dmitry to get all the digits on the board from 00 to p−1.

It can be shown that this always requires a finite number of operations.

Example

input

Copy

11
2 3
1 2
4 2
1 1 1 1
6 6
1 2 3 4 5 0
5 2
1 0 1 0 1
3 10
1 2 3
5 1000
4 1 3 2 5
3 5
2 3 4
4 4
3 2 3 0
1 3
2
5 5
1 2 2 2 4
3 4
1 0 1

output

Copy

1
1
0
0
7
995
2
1
1
1
2

题意:

给你n个数,形成一列,给你p代表进制,让你求出现0~p-1最少需要多少次数

代码

#include<iostream>
#include<set>
using namespace std;
int A[100];
main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int T;cin>>T;
	for(;T--;)
	{
		int N,P;
		cin>>N>>P;
		set<int>S;
		for(int i=0;i<N;i++)
		{
			cin>>A[i];
			S.insert(A[i]);
		}
		if(S.size()==P)
		{
			cout<<"0\n";
			continue;
		}
		int f=0;
		while(S.find(f)!=S.end())f++;
		if(A[N-1]<=f)
		{
			int lst=P-1;
			while(S.find(lst)!=S.end())lst--;
			cout<<lst-A[N-1]<<"\n";
			continue;
		}
		int ans=P-A[N-1];
		S.insert(0);
		int carry=1;
		for(int i=N-2;i>=0||carry!=0;i--)
		{
			int a=carry;
			if(i>=0)a+=A[i];
			S.insert(a%P);
			carry=a/P;
		}
		
		int lst=A[N-1];
		while(lst>=0&&S.find(lst)!=S.end())lst--;
		if(lst>=0)ans+=lst;
		cout<<ans<<"\n";
	}
}