상용 코드 템 플 릿 2 - 데이터 구조
// s[] ,p[] ,n s ,m p
Next :
for (int i = 2, j = 0; i <= m; i ++ ){
while (j && p[i] != p[j + 1]) j = ne[j];
if (p[i] == p[j + 1]) j ++ ;
ne[i] = j;
}
//
for (int i = 1, j = 0; i <= n; i ++ ){
while (j && s[i] != p[j + 1]) j = ne[j];
if (s[i] == p[j + 1]) j ++ ;
if (j == m){
j = ne[j];
//
}
}
트 리 - 템 플 릿
int son[N][26], cnt[N], idx;
// 0 ,
// son[][]
// cnt[]
//
void insert(char *str)
{
int p = 0;
for (int i = 0; str[i]; i ++ )
{
int u = str[i] - 'a';
if (!son[p][u]) son[p][u] = ++ idx;
p = son[p][u];
}
cnt[p] ++ ;
}
//
int query(char *str)
{
int p = 0;
for (int i = 0; str[i]; i ++ )
{
int u = str[i] - 'a';
if (!son[p][u]) return 0;
p = son[p][u];
}
return cnt[p];
}
그리고 집합 - 템 플 릿 문제 AcWing 836. 통합 집합
(1) :
int p[N]; //
// x
int find(int x)
{
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
// , 1~n
for (int i = 1; i <= n; i ++ ) p[i] = i;
// a b :
p[find(a)] = find(b);
(2) size :
int p[N], size[N];
//p[] , size[] ,
// x
int find(int x)
{
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
// , 1~n
for (int i = 1; i <= n; i ++ )
{
p[i] = i;
size[i] = 1;
}
// a b :
size[find(b)] += size[find(a)];
p[find(a)] = find(b);
(3) :
int p[N], d[N];
//p[] , d[x] x p[x]
// x
int find(int x)
{
if (p[x] != x)
{
int u = find(p[x]);
d[x] += d[p[x]];
p[x] = u;
}
return p[x];
}
// , 1~n
for (int i = 1; i <= n; i ++ )
{
p[i] = i;
d[i] = 0;
}
// a b :
p[find(a)] = find(b);
d[find(a)] = distance; // , find(a)
더미 - 템 플 릿 문제 AcWing 838. 더미 정렬
// h[N] , h[1] ,x 2x, 2x + 1
// ph[k] k
// hp[k] k
int h[N], ph[N], hp[N], size;
// ,
void heap_swap(int a, int b)
{
swap(ph[hp[a]],ph[hp[b]]);
swap(hp[a], hp[b]);
swap(h[a], h[b]);
}
void down(int u)
{
int t = u;
if (u * 2 <= size && h[u * 2] < h[t]) t = u * 2;
if (u * 2 + 1 <= size && h[u * 2 + 1] < h[t]) t = u * 2 + 1;
if (u != t)
{
heap_swap(u, t);
down(t);
}
}
void up(int u)
{
while (u / 2 && h[u] < h[u / 2])
{
heap_swap(u, u / 2);
u >>= 1;
}
}
// O(n)
for (int i = n / 2; i; i -- ) down(i);
일반 해시 - 템 플 릿
(1)
int h[N], e[N], ne[N], idx;
//
void insert(int x)
{
int k = (x % N + N) % N;
e[idx] = x;
ne[idx] = h[k];
h[k] = idx ++ ;
}
//
bool find(int x)
{
int k = (x % N + N) % N;
for (int i = h[k]; i != -1; i = ne[i])
if (e[i] == x)
return true;
return false;
}
(2)
int h[N];
// x , x ; x , x
int find(int x)
{
int t = (x % N + N) % N;
while (h[t] != null && h[t] != x)
{
t ++ ;
if (t == N) t = 0;
}
return t;
}
문자열 해시
: P ,P 131 13331,
: 2^64, unsigned long long ,
typedef unsigned long long ULL;
ULL h[N], p[N]; // h[k] k , p[k] P^k mod 2^64
//
p[0] = 1;
for (int i = 1; i <= n; i ++ )
{
h[i] = h[i - 1] * P + str[i];
p[i] = p[i - 1] * P;
}
// str[l ~ r]
ULL get(int l, int r)
{
return h[r] - h[l - 1] * p[r - l + 1];
}
C + + STL 소개
vector, ,
size()
empty()
clear()
front()/back()
push_back()/pop_back()
begin()/end()
[]
,
pair
first,
second,
, first , second ( )
string,
size()/length()
empty()
clear()
substr( ,( ))
c_str()
queue,
size()
empty()
push()
front()
back()
pop()
priority_queue, ,
push()
top()
pop()
:priority_queue, greater> q;
stack,
size()
empty()
push()
top()
pop()
deque,
size()
empty()
clear()
front()/back()
push_back()/pop_back()
push_front()/pop_front()
begin()/end()
[]
set, map, multiset, multimap, ( ),
size()
empty()
clear()
begin()/end()
++, -- , O(logn)
set/multiset
insert()
find()
count()
erase()
(1) x, x O(k + logn)
(2) ,
lower_bound()/upper_bound()
lower_bound(x) x
upper_bound(x) x
map/multimap
insert() pair
erase() pair
find()
[] multimap 。 O(logn)
lower_bound()/upper_bound()
unordered_set, unordered_map, unordered_multiset, unordered_multimap,
, O(1)
lower_bound()/upper_bound(), ++,--
bitset,
bitset<10000> s;
~, &, |, ^
>>, <<
==, !=
[]
count() 1
any() 1
none() 0
set() 1
set(k, v) k v
reset() 0
flip() ~
flip(k) k
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.