题意:给定一个长度为n 的数组,通过两个操作将数组中的每个元素都满足a[i]%m==0:
- 操作一:将a[i]+=x&&x++;
- 操作二:x++
思路:获得数组时将所有的元素对m取余,并用m减去这个值得到在一圈中第几次可以把当前数据变为余m 等于0,然后将数组排序,然后执行下面所示代码(核心):
for(int i=1;i<n;i++) {
if(a[i]!=0&&a[i-1]%m==a[i]%m) {
a[i] = a[i-1] + m;
}
}
最后再排序,通过判断直接得到答案
注意的是数组要开long
AC代码:
package 练习;
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
static Scanner sc=new Scanner(System.in);
static int ans=0,n,m;
static char a[][];
public static void main(String[] args) {
//show();
for(int t=sc.nextInt();t>0;t--) {
show();
}
}
private static void show() {
int n=sc.nextInt();
int m=sc.nextInt();
long a[]=new long [n];
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
a[i]%=m;
a[i]=a[i]==0?0:m-a[i];
}
Arrays.sort(a);
for(int i=1;i<n;i++) {
if(a[i]!=0&&a[i-1]%m==a[i]%m) {
a[i] = a[i-1] + m;
}
}
Arrays.sort(a);
System.out.println(a[n-1]==0?0:a[n-1]+1);
}
}