1200*B. M-arrays(贪心&规律)

Problem - 1497B - Codeforces

1200*B. M-arrays(贪心&规律)_第1张图片

1200*B. M-arrays(贪心&规律)_第2张图片 解析:

        每组相邻的两个值的和整除m,所以每相邻两个数取模m之和必须等于m

        统计 x%m 的个数,然后判断即可

#include
using namespace std;
#define int long long
int t,n,m;
signed main(){
	scanf("%lld",&t);
	while(t--){
		scanf("%lld%lld",&n,&m);
		int f=0;
		mapmp;
		for(int i=1;i<=n;i++){
			int x;
			scanf("%lld",&x);
			if(x%m==0) f=1;
			else mp[x%m]++;
		}
		int res=0;
		for(auto it:mp){
			if(it.second==0) continue;
			int x=it.first,y=it.second;
			if(x*2==m){
				res++;
				mp[x]=0;
			}
			else{
				int k=mp[m-x];
				int maxx=max(y,k);
				int minn=min(y,k);
				if(abs(maxx-minn)<=1){
					res++;
				}
				else{
					res+=1+(maxx-minn-1);
				}
				mp[x]=0;
				mp[m-x]=0;
			}
		}
		if(f) res++;
		printf("%lld\n",res);
	}
	return 0;
}

你可能感兴趣的:(codeforces,算法,数据结构,c语言,开发语言,贪心)