1 条题解

  • 1
    @ 2023-9-30 13:19:10

    未开发

    using namespace std;
    typedef long long ll;
    const int N = 110, len = 32;
    bool vis[N];
    ll a[N], b[N];
    int n;
    
    bool insert(ll x)	
    {
    	for(int j = len; j >= 0; --j)	
    	{
    		if((x & (1ll << j))== 0)
    			continue;
    		if(b[j])		
    			x ^= b[j];	
    		else{
    
    			for(int k = j - 1; k >= 0; --k)
    			{
    				if(x & (1ll << k))
    					x ^= b[k];
    			}
     
    			for(int k = len; k >= j + 1; --k)
    			{
    				if(b[k] & (1ll << j))
    					b[k] ^= x;
    			}
    			b[j] = x;	
    			return true;	
    		}						
    	}	
    	return false;
    }
    
    int main()
    {
    	scanf("%d", &n);
    	for(int i = 0; i < n; ++i)
    		scanf("%lld", &a[i]);
    	sort(a, a + n, greater<int>());
    	int cnt = 0;	
    	ll sum = 0;		
    	for(int i = 0; i < n; ++i)
    	{
    		if(insert(a[i]))
    			vis[i] = true, cnt++;
    		else
    			sum += a[i];
    	}
    	if(cnt == 1)
    		printf("-1\n");	
    	else
    		printf("%lld\n", sum);
    	return 0;
    }
    
    
    • 1

    信息

    ID
    140
    时间
    1000ms
    内存
    128MiB
    难度
    9
    标签
    递交数
    18
    已通过
    4
    上传者