problemscpp
A collection of my answers to algorithm problems in c++.
templates.h
浏览该文件的文档.
1#pragma once
2#include <array>
3#include <string>
4#include <vector>
5
6using namespace std;
7
9struct TrieNode {
10 char ch;
11 array<TrieNode *, 26> nexts = {};
12 bool end_of_word = false;
13 unsigned count = 0;
14
15 explicit TrieNode(char ch)
16 : ch(ch) {}
17
18 void insert(const string &str);
19 ~TrieNode();
20};
21
23class BigInt {
24private:
25 bool positive = true;
26 vector<unsigned short> vec = {};
27 [[nodiscard]] unsigned long get_size() const;
28 unsigned short operator[](unsigned long /*i*/) const;
29 BigInt(const vector<unsigned short> &vec, bool positive);
30 vector<unsigned short> operator*(unsigned short n) const;
31
32public:
33 BigInt(short n);
34 BigInt(int n);
35 BigInt(long n);
36 BigInt(long long n);
37 BigInt(unsigned short n);
38 BigInt(unsigned int n);
39 BigInt(unsigned long n);
40 BigInt(unsigned long long n);
41 BigInt(const string &str);
42 BigInt(const char *str);
43 BigInt(const BigInt &bi);
44 BigInt operator+(const BigInt &bi) const;
45 BigInt operator-(const BigInt &bi) const;
46 BigInt operator*(const BigInt &bi) const;
47 BigInt operator/(const BigInt &bi) const;
48 BigInt operator%(const BigInt &bi) const;
49 BigInt operator-() const;
50 BigInt &operator+=(const BigInt &bi);
51 BigInt &operator-=(const BigInt &bi);
52 BigInt &operator*=(const BigInt &bi);
53 BigInt &operator/=(const BigInt &bi);
54 BigInt &operator%=(const BigInt &bi);
57 BigInt operator++(int);
58 BigInt operator--(int);
59 bool operator>(const BigInt &bi) const;
60 bool operator<(const BigInt &bi) const;
61 bool operator==(const BigInt &bi) const;
62 bool operator!=(const BigInt &bi) const;
63 bool operator>=(const BigInt &bi) const;
64 bool operator<=(const BigInt &bi) const;
65 friend ostream &operator<<(ostream &os, const BigInt & /*bi*/);
66 friend istream &operator>>(istream &is, const BigInt & /*bi*/);
67 BigInt();
68};
69
71class Fraction {
72private:
73 bool positive;
74 unsigned long long numerator;
75 unsigned long long denominator;
76 void simplify();
77
78public:
79 Fraction(bool positive, long long numerator, long long denominator);
80 Fraction operator+(const Fraction &f) const;
81 Fraction operator-(const Fraction &f) const;
82 Fraction operator*(const Fraction &f) const;
83 Fraction operator/(const Fraction &f) const;
84 [[nodiscard]] bool is_positive() const;
85 [[nodiscard]] unsigned long long get_numerator() const;
86 [[nodiscard]] unsigned long long get_denominator() const;
87 friend ostream &operator<<(ostream &os, const Fraction &frac);
88};
89
91class UnionFind {
92private:
93 vector<int> parent;
94 vector<int> rank;
95 vector<int> size;
96
97public:
98 explicit UnionFind(int n);
99 int find(int x);
100 void unite(int x, int y);
101 bool same(int x, int y);
102 int get_size(int x);
103 unsigned count();
104};
105
107class Matrix {
108private:
109 vector<vector<int>> mat;
110
111public:
112 Matrix(int n);
113 Matrix(const Matrix &m);
114 Matrix operator*(const Matrix &m) const;
115 vector<int> &operator[](int i);
116 const vector<int> &operator[](int i) const;
117 static Matrix identity(int n);
118};
字典树节点
Definition: templates.h:9
char ch
Definition: templates.h:10
array< TrieNode *, 26 > nexts
Definition: templates.h:11
unsigned count
Definition: templates.h:13
void insert(const string &str)
Definition: templates.cpp:9
TrieNode(char ch)
Definition: templates.h:15
bool end_of_word
Definition: templates.h:12
高精度整数
Definition: templates.h:23
BigInt & operator++()
Definition: templates.cpp:363
bool operator>(const BigInt &bi) const
Definition: templates.cpp:268
BigInt operator+(const BigInt &bi) const
Definition: templates.cpp:169
vector< unsigned short > operator*(unsigned short n) const
Definition: templates.cpp:219
unsigned short operator[](unsigned long) const
Definition: templates.cpp:29
unsigned long get_size() const
Definition: templates.cpp:27
BigInt & operator*=(const BigInt &bi)
Definition: templates.cpp:334
bool operator<(const BigInt &bi) const
Definition: templates.cpp:293
BigInt & operator-=(const BigInt &bi)
Definition: templates.cpp:329
bool operator!=(const BigInt &bi) const
Definition: templates.cpp:313
BigInt operator-() const
Definition: templates.cpp:361
friend ostream & operator<<(ostream &os, const BigInt &)
Definition: templates.cpp:349
bool positive
Definition: templates.h:25
BigInt(unsigned long long n)
BigInt operator/(const BigInt &bi) const
Definition: templates.cpp:264
BigInt operator%(const BigInt &bi) const
Definition: templates.cpp:266
bool operator<=(const BigInt &bi) const
Definition: templates.cpp:322
bool operator>=(const BigInt &bi) const
Definition: templates.cpp:320
vector< unsigned short > vec
Definition: templates.h:26
BigInt(long long n)
friend istream & operator>>(istream &is, const BigInt &)
Definition: templates.cpp:359
BigInt & operator/=(const BigInt &bi)
Definition: templates.cpp:339
BigInt & operator+=(const BigInt &bi)
Definition: templates.cpp:324
BigInt & operator--()
Definition: templates.cpp:368
bool operator==(const BigInt &bi) const
Definition: templates.cpp:306
BigInt & operator%=(const BigInt &bi)
Definition: templates.cpp:344
分数
Definition: templates.h:71
bool is_positive() const
Definition: templates.cpp:389
Fraction operator+(const Fraction &f) const
Definition: templates.cpp:414
Fraction(bool positive, long long numerator, long long denominator)
Definition: templates.cpp:401
Fraction operator-(const Fraction &f) const
Definition: templates.cpp:426
unsigned long long get_denominator() const
Definition: templates.cpp:393
unsigned long long get_numerator() const
Definition: templates.cpp:391
unsigned long long denominator
分母
Definition: templates.h:75
void simplify()
Definition: templates.cpp:395
bool positive
正负
Definition: templates.h:73
Fraction operator/(const Fraction &f) const
Definition: templates.cpp:450
unsigned long long numerator
分子
Definition: templates.h:74
friend ostream & operator<<(ostream &os, const Fraction &frac)
Definition: templates.cpp:452
Fraction operator*(const Fraction &f) const
Definition: templates.cpp:438
并查集
Definition: templates.h:91
vector< int > size
Definition: templates.h:95
void unite(int x, int y)
Definition: templates.cpp:496
vector< int > rank
Definition: templates.h:94
int get_size(int x)
Definition: templates.cpp:516
vector< int > parent
Definition: templates.h:93
bool same(int x, int y)
Definition: templates.cpp:514
int find(int x)
Definition: templates.cpp:489
UnionFind(int n)
Definition: templates.cpp:478
unsigned count()
Definition: templates.cpp:518
矩阵
Definition: templates.h:107
vector< vector< int > > mat
Definition: templates.h:109
Matrix operator*(const Matrix &m) const
Definition: templates.cpp:537
vector< int > & operator[](int i)
Definition: templates.cpp:549
static Matrix identity(int n)
Definition: templates.cpp:557
Matrix(int n)
Definition: templates.cpp:526