banner
NEWS LETTER

Codeforces Python防卡哈希模板

Scroll down
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import sys
from collections import defaultdict, Counter
from random import randint


input = sys.stdin.readline


class CFDefaultDict(defaultdict):
def __init__(self, default_factory: callable):
super(CFDefaultDict, self).__init__()
self.rnd = randint(57, 8086)
self.default_factory = default_factory

def _v(self, i):
return i + self.rnd

def __contains__(self, key):
return super().__contains__(self._v(key))

def __getitem__(self, key):
return super().__getitem__(self._v(key))

def __setitem__(self, key, value):
super().__setitem__(self._v(key), value)

def __delitem__(self, key):
super().__delitem__(self._v(key))
def __iter__(self):
return (key - self.rnd for key in super().__iter__())

def update(self, iterable):
for key, value in iterable:
self[key] = value

class CFCounter(Counter):
def __init__(self, iterable=None, /, **kwds):
self.rnd = randint(57, 8086)
super(CFCounter, self).__init__(iterable, **kwds)

def _v(self, i):
return i + self.rnd

def __contains__(self, key):
return super().__contains__(self._v(key))

def __getitem__(self, key):
return super().__getitem__(self._v(key))

def __setitem__(self, key, value):
super().__setitem__(self._v(key), value)

def __delitem__(self, key):
super().__delitem__(self._v(key))

def update(self, iterable):
for elem in iterable:
self[elem] += 1


class CFSet:
def __init__(self, iterable=None, /):
self.rnd = randint(57, 8086)

if iterable is None:
self.s = set()
else:
self.s = set(map(self._v, iterable))

def _v(self, i):
return i + self.rnd

def add(self, elem):
self.s.add(self._v(elem))

def remove(self, elem):
self.s.remove(self._v(elem))

def discard(self, elem):
self.s.discard(self._v(elem))

def __contains__(self, elem):
return self._v(elem) in self.s

def __iter__(self):
for elem in self.s:
yield elem - self.rnd

def __len__(self):
return len(self.s)

我很可爱,请给我钱

其他文章
cover
随笔[0]
  • 25/04/11
  • 01:30
  • 161
  • 1