把 154 分解成 2×11×7。
把 147 分解成 3×7×7。
用 f 数组能否整除某个数(代码底下)。
为什么 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)
*/