1 solutions

  • 0
    @ 2025-11-5 15:41:46

    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