求助,#6wa的原因
查看原帖
求助,#6wa的原因
497711
EnriqueYXH楼主2022/1/24 21:04

这段是自己写的

#6 WA 了

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {if (ch == '-') f = -1;ch = getchar();}
	while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
	return x * f;
}
const int N = 2e5 + 5;
int n, m;
int a[N];
int ans; // 1 ^ 1 会变 0, 1 + 1 会进位 故题意 可转化为求每位最多只有 一个 1 
int main() {
	n = read();
	for (int i = 1; i <= n; i++) a[i] = read();
	for (int l = 1, r = 0; l <= n; l++) {
		while (!(m & a[r + 1]) && r + 1 <= n) m ^= a[++r], ans += r - l + 1;
//		ans += r - l + 1;
		m ^= a[l];
//		printf("l = %d, r = %d   ", l, r);
//		printf("%d\n", r - l + 1);
	}
	cout << ans << endl;
	return 0;
}

学着第一篇题解写的

#6 WA 了

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {if (ch == '-') f = -1;ch = getchar();}
	while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
	return x * f;
}
const int N = 2e5 + 5;
int n, s1, s2;
int a[N];
int ans; // 尺取法  
int main() {
	n = read();
	for (int i = 1; i <= n; i++) a[i] = read();
	for (int l = 1, r = 0; l <= n; l++) {
		while ((s1 + a[r + 1] == (s2 ^ a[r + 1])) && r + 1 <= n) s1 += a[++r], s2 ^= a[r];
		ans += r - l + 1;
		s1 -= a[l];
		s2 ^= a[l];
	}
	cout << ans << endl;
	return 0;
}

样例都能过,求助

2022/1/24 21:04
加载中...