1 条题解

  • 0
    @ 2026-5-4 15:43:38

    检查题目中条件的最佳方法是使用位掩码。从 00 遍历到 2n12^n - 1,对于每个数字,考虑它的二进制表示。如果该表示的第 ii 位为 00,则决定第 ii 次旋转为顺时针;反之,则为逆时针。最后,检查总角度是否是 360360 的倍数,如果是,则输出 "YES"。如果没有找到任何符合条件的旋转组合,则输出 "NO"

    #include<bits/stdc++.h>
    int su[32769];
    int n,a[15],i,j,all;
    int main(){
    	scanf("%d",&n);
    	for(i=0;i<n;++i)scanf("%d",a+i);
    	for(i=0;i<1<<n;++i)for(j=0;j<n;++j)if(i>>j&1)su[i]+=a[j];
    	all=su[i-1];
    	for(i=0;i<1<<n;++i)if((all-su[i]*2)%360==0)break;
    	puts(i<1<<n?"YES":"NO");
    	return 0;
    }
    
    • 1

    信息

    ID
    6809
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    1
    已通过
    1
    上传者