最新模板代码模板 cpp.json
{
"HEADER": {
"prefix": "H",
"body": [
"#pragma GCC optimize(\"O2\")",
"#include <bits/stdc++.h>",
"#include <iostream> // cin/cout",
"#include <cstdio> // printf/scanf",
"",
"using namespace std;",
"",
"typedef long long ll; ",
"typedef long double ld; ",
"typedef pair<int, int> pii; ",
"typedef pair<ll, ll> pll; ",
"typedef vector<int> vi; ",
"",
"const long long inf = numeric_limits<long long>::max(); // 无穷大",
"const int N = 100100; // 100100 十万 , 1100100 一百万 , 100100100 一亿",
"",
"void Mysolve(){",
" ",
"}",
"",
"",
"",
"",
"",
"",
"int main(){",
" ios::sync_with_stdio(false);",
" cin.tie(NULL);",
" cout.tie(NULL);",
" //---------优化",
"",
" Mysolve();",
"",
" return 0;",
"}",
"$0"
]
},
"cout<<": {
"prefix": "co",
"body": [
"cout << ",
// "$0"
]
},
"endl; ": {
"prefix": "en",
"body": [
"<< endl; ",
"$0"
]
},
"string ": {
"prefix": "str",
"body": [
"string ",
// "$0"
]
},
"return ": {
"prefix": "ret",
"body": [
"return ",
// "$0"
]
},
"True": {
"prefix": "tr",
"body": [
"true",
// "$0"
]
},
"leetcode": {
"prefix": "lc",
"body": [
"#pragma GCC optimize(\"O2\")",
"",
"#include<bits/stdc++.h>",
"using namespace std;",
"",
"const long long inf = numeric_limits<long long>::max();",
"",
"$0"
]
},
"整数二分": {
"prefix": "ef2f",
"body": [
"bool check(int x) { /* ... */ } // 检查x是否满足某种性质",
"",
"// l l l mid mid+1 r r r mid 在左边 , l + r >> 1 , 自动取左",
"",
"int bsearch_1(int l, int r) {",
" while (l < r) {",
" int mid = l + r >> 1;",
" if (check(mid))",
" r = mid; // check()判断mid是否满足性质",
" else",
" l = mid + 1;",
" }",
" return l;",
"}",
"$0"
]
},
// 判断素数
"IS_PRIME": {
"prefix": "prime",
"body": [
"// 判断一个数是否是质数",
"bool is_prime(int n) {",
" if (n <= 1)",
" return false; // 1 和负数不是质数",
" for (int i = 2; i * i <= n; ++i) {",
" if (n % i == 0)",
" return false;",
" }",
" return true;",
"}",
"$0"
]
},
"factor分解质因数": { //分解质因数
"prefix": "fenjie_zhiYinShu",
"body": [
"void divide(int x) {",
" for (int i = 2; i <= x / i; i++) {",
" if (x % i == 0) {",
" int s = 0;",
" while (x % i == 0) {",
" x /= i;",
" s++;",
" }",
" cout << i << ' ' << s << endl;",
" }",
" }",
" if (x > 1) cout << x << ' ' << 1 << endl;",
" cout << endl; //6 = 2^1 * 3^1",
"}"
],
"description": "A function to perform prime factorization of a number x, printing each prime factor and its exponent."
},
"ADD_HIGH_PRECISION": { //高精度加法
"prefix": "hadd",
"body": [
"// C = A + B, A >= 0, B >= 0 ",
"string a, b;",
"vector<int> A, B;",
"",
"// cin >> a >> b;",
"// for (int i = a.size() - 1; i >= 0; i--)",
"// A.push_back(a[i] - '0'); // 倒序存储第一个数",
"// for (int i = b.size() - 1; i >= 0; i--)",
"// B.push_back(b[i] - '0'); // 倒序存储第二个数",
"// auto C = add(A, B); // 调用加和函数",
"// for (int i = C.size() - 1; i >= 0; i--)",
"// cout << C[i]; // 倒序输出C中的数字",
"vector<int> add(vector<int> &A, vector<int> &B) {",
" if (A.size() < B.size())",
" return add(B, A);",
"",
" vector<int> C;",
" int t = 0;",
" for (int i = 0; i < A.size(); i++) {",
" t += A[i];",
" if (i < B.size())",
" t += B[i];",
" C.push_back(t % 10);",
" t /= 10;",
" }",
"",
" if (t)",
" C.push_back(t);",
" return C;",
"}",
"$0"
]
},
"SUB_LARGE_INTS": { //高精度减hh
"prefix": "hsub",
"body": [
"// C = A - B, 满足A >= B, A >= 0, B >= 0",
"string a, b;",
"vector<int> A, B;",
"",
"// cin >> a >> b;",
"// for (int i = a.size() - 1; i >= 0; i--)",
"// A.push_back(a[i] - '0');",
"// for (int i = b.size() - 1; i >= 0; i--)",
"// B.push_back(b[i] - '0');",
"// if (cmp(A, B))",
"// {",
"// auto C = sub(A, B);",
"// for (int i = C.size() - 1; i >= 0; i--)",
"// printf(\"%d\", C[i]);",
"// return 0;",
"// }",
"// else",
"// {",
"// auto C = sub(B, A);",
"// printf(\"-\");",
"// for (int i = C.size() - 1; i >= 0; i--)",
"// printf(\"%d\", C[i]);",
"// return 0;",
"// }",
"",
"bool cmp(vector<int> &A, vector<int> &B) {",
" if (A.size() != B.size())",
" return A.size() > B.size(); // 直接返回就不用else",
"",
" for (int i = A.size() - 1; i >= 0; i--)",
" if (A[i] != B[i])",
" return A[i] > B[i];",
"",
" return true;",
"}",
"",
"vector<int> sub(vector<int> &A, vector<int> &B) {",
" vector<int> C;",
" int t = 0;",
" for (int i = 0; i < A.size(); i++) {",
" t = A[i] - t;",
" if (i < B.size())",
" t -= B[i];",
" C.push_back((t + 10) % 10); // 合并为1",
" if (t < 0)",
" t = 1;",
" else",
" t = 0;",
" }",
"",
" while (C.size() > 1 && C.back() == 0)",
" C.pop_back(); // 去掉前导0",
"",
" return C;",
"}",
"$0"
]
},
"MUL_LARGE_INTS": { // 高精度乘法
"prefix": "hmul",
"body": [
"// C = a * b , A >= 0, b >= 0",
"string a, b;",
"vector<int> A, B;",
"",
"// cin >> a >> b;",
"// for (int i = a.size() - 1; i >= 0; i--)",
"// A.push_back(a[i] - '0');",
"// for (int i = b.size() - 1; i >= 0; i--)",
"// B.push_back(b[i] - '0');",
"",
"// vector<int> C = mul(A, B);",
"// for (int i = 0; i < C.size(); i++)",
"// cout << C[i];",
"",
"vector<int> mul(vector<int> A, vector<int> B) {",
" vector<int> C(A.size() + B.size() + 7, 0); // 数组C开大一点没事,可以去前导零的",
" for (int i = 0; i < A.size(); i++) {",
" for (int j = 0; j < B.size(); j++) {",
" C[i + j] += A[i] * B[j];",
" }",
" }",
"",
" // 处理进位",
" for (int i = 0; i + 1 < C.size(); i++) {",
" C[i + 1] += C[i] / 10;",
" C[i] %= 10;",
" }",
"",
" // 处理前导零 '0000' 去掉前导零",
" while (C.size() > 1 && C.back() == 0)",
" C.pop_back();",
"",
" reverse(C.begin(), C.end());",
" return C;",
"}",
"$0"
]
},
"DIV_LARGE_INT": { // 高精度除法
"prefix": "hdiv",
"body": [
"// A / b = C ... r, A >= 0, b > 0",
"string a;",
"vector<int> A;",
"int b, c;",
"",
"// cin >> a >> b;",
"// for (int i = a.size() - 1; i >= 0; i--)",
"// A.push_back(a[i] - '0');",
"// auto C = div(A, b, c);",
"// for (int i = C.size() - 1; i >= 0; i--)",
"// cout << C[i];",
"// cout << \"\\n\"",
"// << c << endl;",
"",
"vector<int> div(vector<int> &A, int b, int &r) {",
" vector<int> C;",
" r = 0;",
" for (int i = A.size() - 1; i >= 0; i--) {",
" r = r * 10 + A[i];",
" C.push_back(r / b);",
" r %= b;",
" }",
"",
" reverse(C.begin(), C.end());",
" while (C.size() > 1 && C.back() == 0)",
" C.pop_back();",
" return C;",
"}",
"$0"
]
},
"MODULAR_EXPONENTIATION": { // 快速幂
"prefix": "qmi",
"body": [
"// 求 m^k mod p , 时间复杂度 O(logk)",
"int qmi(int m, int k, int p) {",
" int res = 1 % p, t = m;",
" while (k) {",
" if (k & 1)",
" res = (ll)res * t % p;",
" t = (ll)t * t % p;",
" k >>= 1;",
" }",
" return res;",
"}",
"",
"// int qmi(int m, int k) // 不求mod",
"// {",
"// int res = 1, t = m;",
"// while (k) {",
"// if (k & 1)",
"// res = (ll)res * t;",
"// t = (ll)t * t;",
"// k >>= 1;",
"// }",
"// return res;",
"// }",
"$0"
]
},
"DATE_UTILITIES": { // 日期问题
"prefix": "dateQuestion",
"body": [
"int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};",
"// int year = date / 10000;",
"// int month = date % 10000 / 100;",
"// int day = date % 100;",
"",
"// 判断闰年",
"int is_leap(int year) {",
" if (year % 4 == 0 && year % 100 || year % 400 == 0)",
" return 1;",
" return 0;",
"}",
"",
"// 求当年当月的天数",
"int get_days(int y, int m) {",
" if (m == 2)",
" return 28 + is_leap(y);",
" return months[m];",
"}",
"",
"// 计算 0001.01.01 到目标日期的天数",
"int calculateDay(int y, int m, int d) {",
" int res = 0;",
" for (int i = 1; i < y; i++)",
" res += 365 + is_leap(i);",
" for (int i = 1; i < m; i++)",
" res += get_days(y, i);",
" return res + d; // 注意, 如果求2个日期相差几天, 如20110422 - 20110412 的天数 , 结果要+1 , abs(calculateDay(20110422) - calculateDay(20110412)) + 1",
"}",
"",
"// 计算 0001.01.01 到目标日期的天数",
"int calculateDay(int date) {",
" int y = date / 10000; // 年",
" int m = date % 10000 / 100; // 月",
" int d = date % 100; // 日",
" int res = 0;",
" for (int i = 1; i < y; i++)",
" res += 365 + is_leap(i);",
" for (int i = 1; i < m; i++)",
" res += get_days(y, i);",
" return res + d; // 注意, 如果求2个日期相差几天, 如20110422 - 20110412 的天数 , 结果要+1 , abs(calculateDay(20110422) - calculateDay(20110412)) + 1",
"}",
"",
"// 判断日期是否合法 , 合法形式: 20240201",
"bool check_date(int date) {",
" int year = date / 10000; // 年",
" int month = date % 10000 / 100; // 月",
" int day = date % 100; // 日",
" if (!day || month < 1 || month > 12)",
" return false;",
" if (month != 2 && day > months[month])",
" return false;",
" if (month == 2) {",
" if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { // 闰年特判",
" if (day > 29)",
" return false;",
" } else {",
" if (day > 28)",
" return false;",
" }",
" }",
" return true;",
"}",
"$0"
]
},
"MERGE_SEGMENTS": { //合并区间
"prefix": "mergeSegments",
"body": [
"vector<pii> segment;",
"void mergeMy(vector<pii> &segment) {",
" vector<pii> ans;",
"",
" sort(segment.begin(), segment.end()); // 默认排序左端点",
"",
" int start = -2e9, end = -2e9;",
"",
" for (auto seg : segment) {",
" if (end < seg.first) {",
" if (start != -2e9) // 没有交集",
" ans.push_back({start, end});",
" start = seg.first, end = seg.second;",
" } else {",
" end = max(end, seg.second); // 合并情况不添加ans",
" }",
" }",
" if (start != -2e9) // 防止vector是空集 , 空集就是也是一个区间",
" ans.push_back({start, end});",
" segment = ans;",
"}",
"",
"// int n;",
"// cin >> n;",
"// for (int i = 0; i < n; i++) {",
"// int l, r;",
"// cin >> l >> r;",
"// segment.push_back({l, r});",
"// }",
"// mergeMy(segment);",
"$0"
]
},
"PREFIX_SUM": { //前缀和
"prefix": "qianZhuisum",
"body": [
"int arry[N], s[N]; // s是前缀和",
"//cin >> n >> m;",
"",
"for (int i = 1; i <= n; i++) {",
" cin >> arry[i];",
"}",
"for (int i = 1; i <= n; i++) {",
" s[i] = s[i - 1] + arry[i];",
"}",
"",
"while (m--) {",
" int l, r;",
" cin >> l >> r;",
" cout << s[r] - s[l - 1] << endl; //求出一个区间的和",
"}",
"$0"
]
},
"BFS_TEMPLATE": { //bfs
"prefix": "bfs",
"body": [
"void bfs() {",
" queue<int> q; // 一般用stl库中的queue来实现队列比较方便",
" q.push(起点S); // 将初始状态入队",
" 标记初始状态已入队。",
" while (!q.empty()) { // 队列不为空就执行入队出队操作",
" int top = q.front(); // 取出队首",
" q.pop(); // 队首出队",
" for (枚举所有可扩展的状态) {",
" if (check()) { // 状态合法",
" q.push(temp); // 状态入队",
" 标记成已入队。",
" }",
" }",
" }",
"}"
]
},
"INTEGER_TO_BINARY": { // n >> k & 1 //求n的第k位数字
"prefix": "binN_int", // 二进制转化
"body": [
"int n = ${1:10};",
"string bitN;",
"",
"for (int k = 31; k >= 0; k--) {",
" cout << (n >> k & 1);",
" bitN += (n >> k & 1) ? '1' : '0';",
"}",
"cout << endl;",
"cout << bitN << endl;"
],
"description": "Convert an integer to its binary representation and store it as a string."
},
"TWO_POINTERS": { //双指针
"prefix": "double_two_pointers",
"body": [
"for (int i = 0, j = 0; i < n; i++) {",
" while (j < i && check(i, j)) j++;",
"",
" // 具体问题的逻辑",
"}"
],
"description": "A two-pointer approach used for solving specific problems where conditions depend on both pointers."
},
}
Cpp各类模板设置
插入代码模板
"nameXXX": {
"prefix": "XXX操作码",
"body": [
"xxxxxx",
"xxxxxx",
"yyyyyy",
"yyyyyy",
"$0"
]
},
头文件
#pragma GCC optimize("O2")
#include<bits/stdc++.h>
#include <iostream> // cin/cout
#include <cstdio> // printf/scanf
#include <algorithm>
#include <vector> // 容器
#include <string> // 字符串
#include <stack> // 栈
#include <queue> // 队列
#include <unordered_map> // 哈希表
#include <unordered_set> // 哈希表 set
#include <memory> // 智能指针
#include <functional>
#include <numeric>
#include <ranges>
#include <cstring>
#include <bitset>
#include <cmath>
using namespace std;
typedef long long ll; // long long为ll
typedef long double ld; // long doubleld
typedef pair<int, int> pii; // pair<int, int>pii
typedef pair<ll, ll> pll; // pair<ll, ll>pll
typedef vector<int> vi; // vector<int>vi
const long long inf = numeric_limits<long long>::max(); // 无穷大
const int N = 100100; // 100 百 , 100100 十万 , 1100100 一百万 , 100100100 一亿
void Mysolve(){
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//---------优化
Mysolve();
return 0;
}
cpp.json 设置
{
"HEADER": {
"prefix": "H",
"body": [
"#pragma GCC optimize(\"O2\")",
"",
"#include<bits/stdc++.h>",
"#include <iostream> // cin/cout",
"#include <cstdio> // printf/scanf",
"#include <algorithm>",
"#include <vector> // 容器",
"#include <string> // 字符串",
"#include <stack> // 栈",
"#include <queue> // 队列",
"#include <unordered_map> // 哈希表",
"#include <unordered_set> // 哈希表 set",
"#include <memory> // 智能指针",
"#include <functional>",
"#include <numeric>",
"#include <ranges>",
"#include <cstring> ",
"#include <bitset>",
"#include <cmath>",
"",
"using namespace std;",
"",
"typedef long long ll; // long long为ll",
"typedef long double ld; // long doubleld",
"typedef pair<int, int> pii; // pair<int, int>pii",
"typedef pair<ll, ll> pll; // pair<ll, ll>pll",
"typedef vector<int> vi; // vector<int>vi",
"",
"const long long inf = numeric_limits<long long>::max(); // 无穷大",
"const int N = 100100; // 100100 十万 , 1100100 一百万 , 100100100 一亿",
"",
"void Mysolve(){",
" ",
"}",
"",
"int main(){",
" ios::sync_with_stdio(false);",
" cin.tie(NULL);",
" cout.tie(NULL);",
" //---------优化",
"",
" Mysolve();",
" return 0;",
"}",
"$0"
]
},
}
leetcode模板
"leetcode": {
"prefix": "lc",
"body": [
"#pragma GCC optimize(\"O2\")",
"",
"#include<bits/stdc++.h>",
"using namespace std;",
"",
"const long long inf = numeric_limits<long long>::max();",
"",
"$0"
]
},
算法模板
高精度算法
"ADD_HIGH_PRECISION": { //高精度加法
"prefix": "hadd",
"body": [
"// C = A + B, A >= 0, B >= 0 ",
"string a, b;",
"vector<int> A, B;",
"",
"// cin >> a >> b;",
"// for (int i = a.size() - 1; i >= 0; i--)",
"// A.push_back(a[i] - '0'); // 倒序存储第一个数",
"// for (int i = b.size() - 1; i >= 0; i--)",
"// B.push_back(b[i] - '0'); // 倒序存储第二个数",
"// auto C = add(A, B); // 调用加和函数",
"// for (int i = C.size() - 1; i >= 0; i--)",
"// cout << C[i]; // 倒序输出C中的数字",
"vector<int> add(vector<int> &A, vector<int> &B) {",
" if (A.size() < B.size())",
" return add(B, A);",
"",
" vector<int> C;",
" int t = 0;",
" for (int i = 0; i < A.size(); i++) {",
" t += A[i];",
" if (i < B.size())",
" t += B[i];",
" C.push_back(t % 10);",
" t /= 10;",
" }",
"",
" if (t)",
" C.push_back(t);",
" return C;",
"}",
"$0"
]
},
"SUB_LARGE_INTS": { //高精度减hh
"prefix": "hsub",
"body": [
"// C = A - B, 满足A >= B, A >= 0, B >= 0",
"string a, b;",
"vector<int> A, B;",
"",
"// cin >> a >> b;",
"// for (int i = a.size() - 1; i >= 0; i--)",
"// A.push_back(a[i] - '0');",
"// for (int i = b.size() - 1; i >= 0; i--)",
"// B.push_back(b[i] - '0');",
"// if (cmp(A, B))",
"// {",
"// auto C = sub(A, B);",
"// for (int i = C.size() - 1; i >= 0; i--)",
"// printf(\"%d\", C[i]);",
"// return 0;",
"// }",
"// else",
"// {",
"// auto C = sub(B, A);",
"// printf(\"-\");",
"// for (int i = C.size() - 1; i >= 0; i--)",
"// printf(\"%d\", C[i]);",
"// return 0;",
"// }",
"",
"bool cmp(vector<int> &A, vector<int> &B) {",
" if (A.size() != B.size())",
" return A.size() > B.size(); // 直接返回就不用else",
"",
" for (int i = A.size() - 1; i >= 0; i--)",
" if (A[i] != B[i])",
" return A[i] > B[i];",
"",
" return true;",
"}",
"",
"vector<int> sub(vector<int> &A, vector<int> &B) {",
" vector<int> C;",
" int t = 0;",
" for (int i = 0; i < A.size(); i++) {",
" t = A[i] - t;",
" if (i < B.size())",
" t -= B[i];",
" C.push_back((t + 10) % 10); // 合并为1",
" if (t < 0)",
" t = 1;",
" else",
" t = 0;",
" }",
"",
" while (C.size() > 1 && C.back() == 0)",
" C.pop_back(); // 去掉前导0",
"",
" return C;",
"}",
"$0"
]
},
"MUL_LARGE_INTS": { // 高精度乘法
"prefix": "hmul",
"body": [
"// C = a * b , A >= 0, b >= 0",
"string a, b;",
"vector<int> A, B;",
"",
"// cin >> a >> b;",
"// for (int i = a.size() - 1; i >= 0; i--)",
"// A.push_back(a[i] - '0');",
"// for (int i = b.size() - 1; i >= 0; i--)",
"// B.push_back(b[i] - '0');",
"",
"// vector<int> C = mul(A, B);",
"// for (int i = 0; i < C.size(); i++)",
"// cout << C[i];",
"",
"vector<int> mul(vector<int> A, vector<int> B) {",
" vector<int> C(A.size() + B.size() + 7, 0); // 数组C开大一点没事,可以去前导零的",
" for (int i = 0; i < A.size(); i++) {",
" for (int j = 0; j < B.size(); j++) {",
" C[i + j] += A[i] * B[j];",
" }",
" }",
"",
" // 处理进位",
" for (int i = 0; i + 1 < C.size(); i++) {",
" C[i + 1] += C[i] / 10;",
" C[i] %= 10;",
" }",
"",
" // 处理前导零 '0000' 去掉前导零",
" while (C.size() > 1 && C.back() == 0)",
" C.pop_back();",
"",
" reverse(C.begin(), C.end());",
" return C;",
"}",
"$0"
]
},
"DIV_LARGE_INT": { // 高精度除法
"prefix": "hdiv",
"body": [
"// A / b = C ... r, A >= 0, b > 0",
"string a;",
"vector<int> A;",
"int b, c;",
"",
"// cin >> a >> b;",
"// for (int i = a.size() - 1; i >= 0; i--)",
"// A.push_back(a[i] - '0');",
"// auto C = div(A, b, c);",
"// for (int i = C.size() - 1; i >= 0; i--)",
"// cout << C[i];",
"// cout << \"\\n\"",
"// << c << endl;",
"",
"vector<int> div(vector<int> &A, int b, int &r) {",
" vector<int> C;",
" r = 0;",
" for (int i = A.size() - 1; i >= 0; i--) {",
" r = r * 10 + A[i];",
" C.push_back(r / b);",
" r %= b;",
" }",
"",
" reverse(C.begin(), C.end());",
" while (C.size() > 1 && C.back() == 0)",
" C.pop_back();",
" return C;",
"}",
"$0"
]
},
cpp 求年月日
int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// int year = date / 10000;
// int month = date % 10000 / 100;
// int day = date % 100;
int is_leap(int year) // 判断闰年
{
if (year % 4 == 0 && year % 100 || year % 400 == 0)
return 1;
return 0;
}
int get_days(int y, int m) // 求当年当月的天数
{
if (m == 2)
return 28 + is_leap(y);
return months[m];
}
int calculateDay(int y, int m, int d) // 计算 00010101 到目标日期的天数
{
int res = 0;
for (int i = 1; i < y; i++)
res += 365 + is_leap(i);
for (int i = 1; i < m; i++)
res += get_days(y, i);
return res + d; // 注意, 如果求2个日期相差几天, 如20110422 - 20110412 的天数 , 结果要+1 , abs(calculateDay(20110422) - calculateDay(20110412)) + 1
}
int calculateDay(int date) // 计算 00010101 到目标日期的天数
{
int y = date / 10000; // 年
int m = date % 10000 / 100; // 月
int d = date % 100; // 日
int res = 0;
for (int i = 1; i < y; i++)
res += 365 + is_leap(i);
for (int i = 1; i < m; i++)
res += get_days(y, i);
return res + d; // 注意, 如果求2个日期相差几天, 如20110422 - 20110412 的天数 , 结果要+1 , abs(calculateDay(20110422) - calculateDay(20110412)) + 1
}
bool check_date(int date) // 判断日期是否合法 , 合法形式: 20240201
{
int year = date / 10000; // 年
int month = date % 10000 / 100; // 月
int day = date % 100; // 日
if (!day || month < 0 || month > 12)
return false;
if (month != 2 && day > months[month])
return false;
if (month == 2)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) // 闰年特判
{
if (day > 29)
return false;
}
else
{
if (day > 28)
return false;
}
}
return true;
}
区间合并
"MERGE_SEGMENTS": { //合并区间
"prefix": "mergeSegments",
"body": [
"vector<pii> segment;",
"void mergeMy(vector<pii> &segment) {",
" vector<pii> ans;",
"",
" sort(segment.begin(), segment.end()); // 默认排序左端点",
"",
" int start = -2e9, end = -2e9;",
"",
" for (auto seg : segment) {",
" if (end < seg.first) {",
" if (start != -2e9) // 没有交集",
" ans.push_back({start, end});",
" start = seg.first, end = seg.second;",
" } else {",
" end = max(end, seg.second); // 合并情况不添加ans",
" }",
" }",
" if (start != -2e9) // 防止vector是空集 , 空集就是也是一个区间",
" ans.push_back({start, end});",
" segment = ans;",
"}",
"",
"// int n;",
"// cin >> n;",
"// for (int i = 0; i < n; i++) {",
"// int l, r;",
"// cin >> l >> r;",
"// segment.push_back({l, r});",
"// }",
"// mergeMy(segment);",
"$0"
]
},
双指针
"TWO_POINTERS": { //双指针
"prefix": "double_two_pointers",
"body": [
"for (int i = 0, j = 0; i < n; i++) {",
" while (j < i && check(i, j)) j++;",
"",
" // 具体问题的逻辑",
"}"
],
"description": "A two-pointer approach used for solving specific problems where conditions depend on both pointers."
},
快速幂
"MODULAR_EXPONENTIATION": { // 快速幂
"prefix": "qmi",
"body": [
"// 求 m^k mod p , 时间复杂度 O(logk)",
"int qmi(int m, int k, int p) {",
" int res = 1 % p, t = m;",
" while (k) {",
" if (k & 1)",
" res = (ll)res * t % p;",
" t = (ll)t * t % p;",
" k >>= 1;",
" }",
" return res;",
"}",
"",
"// int qmi(int m, int k) // 不求mod",
"// {",
"// int res = 1, t = m;",
"// while (k) {",
"// if (k & 1)",
"// res = (ll)res * t;",
"// t = (ll)t * t;",
"// k >>= 1;",
"// }",
"// return res;",
"// }",
"$0"
]
},
BFS
DFS
判断素数
// 判断素数
"IS_PRIME": {
"prefix": "prime",
"body": [
"// 判断一个数是否是质数",
"bool is_prime(int n) {",
" if (n <= 1)",
" return false; // 1 和负数不是质数",
" for (int i = 2; i * i <= n; ++i) {",
" if (n % i == 0)",
" return false;",
" }",
" return true;",
"}",
"$0"
]
},
整数2分
"整数二分": {
"prefix": "2f",
"body": [
"bool check(int x) { /* ... */ } // 检查x是否满足某种性质",
"",
"// l l l mid mid+1 r r r mid 在左边 , l + r >> 1 , 自动取左",
"",
"int bsearch_1(int l, int r) {",
" while (l < r) {",
" int mid = l + r >> 1;",
" if (check(mid))",
" r = mid; // check()判断mid是否满足性质",
" else",
" l = mid + 1;",
" }",
" return l;",
"}",
"$0"
]
},