游客 Signup | Login
中文 | En

2795 - Angle

小M可以通过直尺和圆规直接画出N种角度,并且她可以将任意两个她画出的角度相加或者相减。现在给出K个角度,问小M能否画出它们。

<br />

Input

输入共三行。
第一行为2个整数N,K(1<=N,K<=10),分别表示小M能直接画出的角度的个数和询问的个数。
第二行为N个小于360的正整数, 表示小M能直接画出的角度。
第三行为K个小于360的正整数,询问小M是否能画出它们。

Output

输出K行,每行回答小M能否画出相应的角度,“YES”表示能,“NO”表示不能。

Examples

Input

2 1
30 70
40

Output

YES

Solution C++

#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

int n,k,ans=0,x;
int a[11]={0};
bool b[361]={0};
bool flag=false;

void sou(int du)
{
	if(du==x)
	{
		flag=true;
		return;
	}
	else if(!flag)
	{
		for(int i=1;i<=n;i++)
		{
			int tmp=(du+a[i])%360;
			if(!b[tmp])
			{
				b[tmp]=true;
				sou(tmp);
			}
		}
		for(int i=1;i<=n;i++)
		{
			int tmp=(du+(360-a[i]))%360;
			if(!b[tmp])
			{
				b[tmp]=true;
				sou(tmp);
			}
		}
	}
}

int main()
{
	scanf("%d%d",&n,&k);
	
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	
	for(int i=1;i<=k;i++)
	{
		memset(b,0,sizeof(b));
		flag=false;
		
		scanf("%d",&x);
		
		sou(0);
		
		if(flag) printf("YES\n");
		else printf("NO\n");
	}
	
	return 0;
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题