1 solutions
-
0
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; }Pascal :
program lonely; var f:array[0..360] of boolean; que:array[0..30000] of longint; b,a:array[0..3000] of longint; x,y,head,tail,n,k,i:longint; begin readln(n,k); for i:=1 to n do begin read(a[i]); f[a[i]]:=true; end; inc(n); a[n]:=360; for i:=1 to k do read(b[i]); for i:=1 to n do que[i]:=a[i]; tail:=n; head:=1; while head<>tail do begin x:=que[head]; for i:=1 to n do begin y:=((a[i]+x)+360) mod 360; if not f[y] then begin inc(tail); que[tail]:=y; inc(n);a[n]:=y; f[y]:=true; end; if not f[360-y] then begin inc(tail); que[tail]:=360-y; inc(n);a[n]:=360-y; f[360-y]:=true; end; y:=((a[i]-x)+360) mod 360; if not f[y] then begin inc(tail); que[tail]:=y; f[y]:=true; inc(n);a[n]:=y; end; if not f[360-y] then begin inc(tail); que[tail]:=360-y; inc(n);a[n]:=360-y; f[360-y]:=true; end; end; inc(head); end; { for i:=1 to n do writeln(a[i]);} for i:=1 to k do if f[b[i]] then writeln('YES') else writeln('NO'); end.
- 1
Information
- ID
- 17057
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By