题面:
bitset<限定的长度> bit;
bitset不用担心长度会爆,对于过长的数字,会自动截取限定的长度,所以初始的长度只要限定能用上的长度即可;
那么对于bit|=bit<<x来讲相当于把之前各种的数都加一个x
然后bit|=bit>>3600相当于把多余3600的那部分对3600进行取模,后再加到bit中;
最后只要判断bit[3600]这个位置是否存在即可
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+50;
const int mod=3600;
int n,idx;
bitset<7000> bit;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t;cin>>t;
while(t--){
bit.reset();
cin>>n;
bit[0]=1;
for(int i=1;i<=n;i++){
int x;cin>>x;
x=x%3600;
bit|=bit<<x;
bit|=bit>>3600;
}
if(bit[3600]) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}