求助入门赛第H题 求Hack 悬关
查看原帖
求助入门赛第H题 求Hack 悬关
347664
菲斯斯夫斯基楼主2023/8/11 21:18

把 154154 分解成 2×11×72\times11\times7。

把 147147 分解成 3×7×73\times7\times7。

用 ff 数组能否整除某个数(代码底下)。

为什么 WA 了啊,求 Hack!

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int t;
int n;
long long a[N],f[10];
char k[N];
long long sum;
bool pd()
{
	memset(f,0,sizeof(f));
	for(int i=1;i<=n;i++)
	{
		if(a[i]%154==0||a[i]%147==0)return true;
		f[1]+=a[i]%2==0;
		f[2]+=a[i]%7==0;
		f[3]+=a[i]%11==0;
		f[4]+=a[i]%3==0;
		f[5]+=a[i]%22==0;
		f[6]+=a[i]%14==0;
		f[7]+=a[i]%77==0;
		f[8]+=a[i]%49==0;
		f[9]+=a[i]%21==0;
	}	
	if(f[5]&&f[2])return true;
	if(f[6]&&f[3])return true;
	if(f[7]&&f[1])return true;
	if(f[8]&&f[4])return true;
	if(f[9]&&f[2]>1)return true;
	return false;
}
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		sum=0;
		long long w=0; 
		scanf("%d%s",&n,k);
//		cout<<strlen(k)<<endl;
		if(strlen(k)<=10)
		{
			for(int i=0;i<strlen(k);i++)
				w=w*10+k[i]-'0';
		}
//		cout<<w<<endl;
		for(int i=1;i<=n;i++)
			scanf("%lld",&a[i]),sum+=a[i];
		if(sum>=w)
		{
			printf("Yes\n");
			continue;
		}
		w!=0&&sum>=w||pd()?printf("Yes\n"):printf("No\n");
	}
	return 0;
}
/*
154=2*11*7
147=7*3*7
1:2
2:7
3:11
4:3
5:22 (2*11)
6:14 (2*7)
7:77 (11*7)
8:49 (7*7)
9:21 (3*7)

*/
2023/8/11 21:18
加载中...