NC14247 - Xorto (前綴異或)

題目鏈接

思路:兩個連續區間的異或和爲0,看到區間嘛,就很容易想到前綴和處理,這個題目也差不多,前綴異或嘛,看着 n 爲 1000,就直接暴力找這兩個區間唄。

枚舉分割點,分割點之前的所有前綴異或和相同的都累加起來,然後枚舉分割點之後的疑惑和,如果有相等的(疑惑和爲0其實就是相等的意思吧)那麼就加上之前累加的值,這就湊成一對了,然後一直搞就出來答案了,ans記得開long long

#include <bits/stdc++.h>
using namespace std;

int pre[1005], n, x;
map <int, int> mp;

int main() {
	scanf("%d", &n);
	for(int i = 1;i <= n; i++) {
		scanf("%d", &x);
		pre[i] = pre[i-1]^x;
	}
	int ans = 0;
	for(int i = 1;i <= n; i++) {
		for(int j = 0;j < i; j++) {
			mp[pre[i]^pre[j]]++;
		}
		for(int j = i+1;j <= n; j++) {
			ans += mp[pre[j]^pre[i]];
		}
	}
	
	printf("%lld\n", ans);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章