社区讨论

求昨晚 CF 的 B 的 hack

灌水区参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@lqiqxo3o
此快照首次捕获于
2023/12/24 08:23
2 年前
此快照最后确认于
2023/12/24 11:11
2 年前
查看原帖
虽然知道正解是 set,但是一直不知道自己的代码怎么 hack。
CPP
#include<bits/stdc++.h>
#define int unsigned long long
#define endl '\n'

int T;
int n;
int a[100005];

signed main(){
//	std::ios::sync_with_stdio(false);
//	std::cin.tie(0);

	std::cin>>T;
	
	while(T--){
		memset(a,0,sizeof(a));
		bool fj=0,fo=0;
  		std::cin>>n;
		
		for(int i=1;i<=n;i++){
   			std::cin>>a[i];
			if(a[i]%2==1)fj=1;
			else fo=1;
			
		}

		if(fj&&fo)std::cout<<2<<endl;
		else{
			fj=0,fo=0;
			int g=a[1];
			for(int i=1;i<=n;i++)g=std::__gcd(g,a[i]);
			for(int i=1;i<=n;i++){
				a[i]/=g;
				if(a[i]%2==1)fj=1;
				else fo=1;
			}
			
			if(fj&&fo)std::cout<<2*g<<endl;
			else if(fo&&!fj){//全偶
				int gg=-1;
				for(int i=1;i<=n;i++){
					a[i]-=2;
					if(gg==-1&&a[i]!=0)gg=a[i];
					else if(a[i]==0)continue;
					else gg=std::__gcd(gg,a[i]);
				}
				std::cout<<g*gg*2<<endl;
			}
			else{//全奇
				int gg=-1;
				for(int i=1;i<=n;i++){
					a[i]--;
					if(gg==-1&&a[i]!=0)gg=a[i];
					else if(a[i]==0)continue;
					else gg=std::__gcd(gg,a[i]);
				}
				std::cout<<gg*g*2<<endl;
			}
		}
	}

	return 0;
}

回复

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

正在加载回复...