蜜汁问题求条
查看原帖
蜜汁问题求条
262620
hez_EX楼主2024/7/14 17:34

始终卡 Test#10,原因不明,除了求逆元几乎和第一篇题解一致。

#include <iostream>
#include <cstdio>
#include <cctype>
#include <cmath>
#define int long long
using namespace std;
inline void read(int &x)
{
	char c=getchar();x=0;
	while(!isdigit(c)) c=getchar();
	while(isdigit(c)) x=x*10+c-48,c=getchar();
}
int prm[2000005],top,phi[2000005];
bool ntp[2000005];
void sv()
{
	phi[1]=1;
	for(int i=2;i<=2000004;i++)
	{
		if(!ntp[i]) prm[++top]=i,phi[i]=i-1;
		for(int j=1;j<=top&&1ll*i*prm[j]<=2000004;j++)
		{
			ntp[i*prm[j]]=true;
			if(i%prm[j]) phi[i*prm[j]]=phi[i]*prm[j];
			else{phi[i*prm[j]]=phi[i]*(prm[j]-1);break;}
		}
	}
}
int fpm(int a,int b,int p)
{
	int sum=1;
	while(b)
	{
		if(b&1) sum=1ll*sum*a%p;
		a=1ll*a*a%p;b>>=1;
	}
	return sum;
}
int n,m,x,y,u,v,k,smc[2000005],p,xs[2000005],ys[2000005];
signed main()
{
	sv();
	read(n);read(m);read(u);read(v);p=n;
	u=fpm(u,phi[n]-1,n);
	v=fpm(v,phi[n]-1,n);
	for(int i=1;i<=m;i++)
	{
		read(x);read(y);
		k=u*x%n-v*y%n;
		while(k<0) k+=n;
		k%=n;
		if(!smc[k]) xs[k]=x,ys[k]=y;
		smc[k]++;
		if(smc[k]>smc[p]) p=k;
	}
	printf("%lld %lld\n",xs[p],ys[p]);
	return 0;
}
2024/7/14 17:34
加载中...