1 条题解

  • 1
    @ 2024-11-11 9:46:40
    using namespace std;
    #define int long long
    int arr[200005];
    int a[200005] ;
    int b[200005] ;
    signed main() {
    	int n;
    	cin >> n;
    
    
    	for (int i = 0; i < n; i++) {
    		cin >> arr[i];
    		a[i] = arr[i];
    		b[i] = arr[i];
    	}
    
    	int maxor = 0;
    	int xx = 0;
    	for (int i = 0; i < n; i++) {
    		xx = xx ^ arr[i];
    	}
    	maxor = max(xx, maxor);
    	//按照模拟写的时候会超时 三个for了
    	//看看能不能先算出总异或除去 改变数组的那个数据
    	//异或逆运算就是再异或一次吧
    
    
    	for (int i = 0; i < n; i++) {
    		for (int j = 1; j <= n / (i + 1); j++) {
    			//如果是i的话 分母为0 会报错的
    			int temp = xx;
    			temp = temp ^ a[i];
    			a[i] += j;
    			temp = temp ^ a[i];
    			maxor = max(maxor, temp);
    			a[i] -= j;
    			//最多进行一次操作
    		}
    	}
    
    
    	for (int i = 0; i < n; i++) {
    		for (int j = 1; j <= n / (i + 1); j++) {
    			int temp = xx;
    			temp = temp ^ b[i];
    			b[i] *= j;
    			temp = temp ^ b[i];
    			maxor = max(maxor, temp);
    			b[i] = b[i] / j;
    		}
    	}
    
    
    	cout << maxor << endl;
    	return 0;
    
    }分享一下思路
    
    
    • 1

    信息

    ID
    1050
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    28
    已通过
    9
    上传者