emm...怎么说呢?
我一开始想打个暴力苟个十分,二十分的,但是忽然就不想打了,于是我就打了一半就交了,没想到就A了!(离谱)
代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
#define ll long long
#define N
#define M
using namespace std;
int re()
{
int s=0,f=1;
char c=getchar();
for(;c<'0'||c>'9';c=getchar())
if(c=='-') f=-1;
for(;c<='9'&&c>='0';c=getchar())
s=s*10+c-'0';
return f*s;
}
void wr(int num)
{
if(num<0) putchar('-'),num=-num;
if(num>9) wr(num/10);
putchar(num%10+'0');
}
void pr(int num)
{
wr(num);
putchar('\n');
}
int n,m;
int angle[1000],tail;
bool cn[400];
int main()
{
n=re(),m=re();
for(int i=1;i<=n;i++){
int a=re();
if(!cn[a%360])
angle[++tail]=a%360,cn[a%360]=1;
}
for(int i=1;i<=tail;i++){ // 这里是处理自加
int a=angle[i];
while(1){
a+=angle[i],a%=360;
if(a==angle[i]){
break;
}
if(!cn[a]){
angle[++tail]=a%360,cn[a%360]=1;
}
}
}
// 接下来要处理两两相加
// 可是它 A 了,真是令人烦恼(手动滑稽)
for(int i=1;i<=m;i++){
int a=re();
if(cn[a%360]){
printf("YES\n");
}
else{
printf("NO\n");
}
}
return 0;
}
hack 数据:
2 1
45 30
15
题外话:
emm,其实上面数据不加也行 (可能只有我是这样做的)