链接: 4507. 子数组异或和
异或的性质比较特殊,这里用到了前缀异或和+哈希。
通常这种区间计数问题又需要O(n)复杂度,都是这种套路优化
import io
import os
import sys
from collections import deque, Counter
from itertools import accumulate
from operator import xor
if sys.hexversion == 50923504:
sys.stdin = open('input.txt')
else:
input = sys.stdin.readline
MOD = 10 ** 9 + 7
def sovle(n, a):
pre = [0] + list(accumulate(a, func=xor))
# print(pre)
c = Counter()
ans = 0
for i, v in enumerate(pre):
ji = i & 1
ans += c[(ji, v)]
c[(ji, v)] += 1
print(ans)
if __name__ == '__main__':
if False:
n = int(input())
m, n = map(int, input().split())
s = list(map(int, input().split()))
n = int(input())
x = list(map(int, input().split()))
sovle(n, x)
链接: 4508. 移动的点
这题不会,等大佬讲解再补吧。
import io
import os
import sys
from collections import deque, Counter
from itertools import accumulate
from operator import xor
if sys.hexversion == 50923504:
sys.stdin = open('input.txt')
else:
input = sys.stdin.readline
MOD = 10 ** 9 + 7
def sovle(n, a, b, xs):
c = Counter()
d = Counter()
ans = 0
for _, vx, vy in xs:
k = vy - a * vx
ans += c[k] - d[(vx, vy)]
c[k] += 1
d[(vx, vy)] += 1
print(ans * 2)
if __name__ == '__main__':
if False:
n = int(input())
m, n = map(int, input().split())
s = list(map(int, input().split()))
n, a, b = map(int, input().split())
xs = []
for _ in range(n):
xs.append(list(map(int, input().split())))
sovle(n, a, b, xs)