社区讨论

求助!52分求调

P9473[yLOI2022] 西施江南参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo24ff7v
此快照首次捕获于
2023/10/23 07:49
2 年前
此快照最后确认于
2023/11/03 08:08
2 年前
查看原帖
线性筛看不懂,手打暴力
CPP
#include<iostream>
#include<algorithm>
#include<cstring>
#define ull unsigned long long
using namespace std;
int T,n,a[500010];
ull ans1=1,ans2=1,sum=1;
ull l,r,t;
int read() 
{
	int x=0;
	char c=getchar();
	while(c<'0'||c>'9')c=getchar();
	while(c>='0'&&c<='9') 
	{
		x*=10;
		x+=c-'0';
		c=getchar();
	}
	return x;
}
bool cmp(int a,int b)
{
	return a<b;
}
void work1()
{
	r=a[2];
	l=a[1];
	t=r%l;
	while(t!=0)
	{
		r=l;
		l=t;
		t=r%l;
	}
	ans1=l;
	for(int i=3;i<=n;i++)
	{
		if(a[i]%ans1!=0)
		{
			r=a[i];
			l=ans1;
			t=r%l;
			while(t!=0)
			{
				r=l;
				l=t;
				t=r%l;
			}
			ans1=l;
		}
	}
}
void work2()
{
	ans2=1;
	for(int i=1;i<=n;i++)
	{
		if(ans2==a[i])continue;
		if(ans2<a[i]&&a[i]%ans2==0)
		{
			ans2=a[i];
			continue;
		}
		if(ans2>a[i]&&ans2%a[i]==0)continue;
		if(ans2>a[i])
		{
			r=ans2;
			l=a[i];
			t=r%l;
		}
		else
		{
			r=a[i];
			l=ans2;
			t=r%l;
		}
		while(t!=0)
		{
			r=l;
			l=t;
			t=r%l;
		}
		if(l==1)ans2*=a[i];
		else ans2*=a[i]/l ;
	}
}
int main()
{
	T=read();
	while(T--)
	{
		sum=1;
		memset(a,0,sizeof a);
		n=read();
		for(int i=1;i<=n;i++)
		{
			a[i]=read();
			sum*=a[i];
		}
		sort(a+1,a+n+1,cmp);
		work1();
		work2();
		if(ans1*ans2==sum)cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...