CF1305C Kuroni and Impossible Calculation 鸽巢原理

题意:

给定n个整数和m,求\(\prod_{1\leq i<j\leq n}|a_i-a_j|mod(m)\)的值

范围&性质:\(2\leq n\leq 2\times 10^5,1\leq m\leq 10^3,0\leq a_i \leq 10^9\)

分析:

吐槽一句:又是一道思维题,啊啊啊啊我就是想不到

第一反应就是\(\omicron(n^2)\)的暴力枚举,由于n范围过大而放弃,同时注意到m的范围很小,mod(m)的余数不会超过m种,那么由鸽巢原理可得前m+1个数里面必定有至少两个数关于mod(m)同余,那么这两个数mod(m)的差值必定为0,即答案为0。对于剩下的n<m的情况直接\(\omicron(n^2)\)的枚举就可以了

代码:

#include<bits/stdc++.h>

using namespace std;

namespace zzc
{
    long long n,m;
	long long a[200005],ans=1;
	
	long long labs(long long x)
	{
		return x<0?-x:x;
	}
	
	void work()
	{
		scanf("%lld%lld",&n,&m);
		for(int i=1;i<=n;i++)
		{
			scanf("%lld",&a[i]);
		}
		if(n>m)
		{
			printf("0\n");
			return ;
		}
		else
		{
			for(int i=2;i<=n;i++)
			{
				for(int j=1;j<i;j++)
				{
					ans=(ans*labs(a[i]-a[j]))%m;
				}
			}
			printf("%lld",ans);
		}
	}
	
}

int main()
{
	zzc::work();
	return 0;
 } 
原文地址:https://www.cnblogs.com/youth518/p/13649616.html