1 条题解
-
1
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
- 上传者