- 博客(299)
- 收藏
- 关注
原创 输入输出挂
简易版:inline int read() { int x=0, f=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)) x=x*10+ch-'0',ch=getchar(); return x*f;}inline void print(int a)...
2019-08-27 22:07:06 414
原创 面试题宝库
文章目录map和unordered_maphashmap的底层:hash冲突:HashMap扩容机制实现一个vector?是1.5还是2倍,各有什么优缺点?c++动态链接库与静态库stl容器 算法 迭代器的关系区别HTTP与TCP的区别和联系线程安全问题排序算法什么是逻辑地址,什么是物理地址?链表和数组的区别是什么new和malloc的区别C++分为内存分为哪几部分?如何判断两个浮点数相等? 需要考虑浮点误差指针和引用的区别extern "C"和extern的区别为什么析构函数通常声明为虚函数?虚函数与纯虚
2021-04-07 23:34:59 901
原创 Codeforces Round 637 (Div. 1)___C. Nastya and Unexpected Guest —— 01bfs
题目链接:点我啊╭(╯^╰)╮题目大意: 有 mmm 个休息站,起点为 d1d_1d1,终点为 dmd_mdm 绿灯时间为 ggg,绿灯时间内必须一直走 红灯时间为 rrr,禁止走,且红灯时间内必须在休息站 只有在休息站内可以调整防线,绿灯红灯交替 求最短时间解题
2020-12-14 17:10:45 400
原创 康托展开求全排列
康托展开:已知一个排列,求这个排列在全排列中是第几个ll kt() { // 计算 p序列在全排列排第几 ll ret = 0; for(int i=1; i<=n; i++) { ll tmp = 0; for(int j=i+1; j<=n; j++) if(p[j] < p[i]) tmp++; ret += tmp * fac[n-i]; //f[]为阶乘 } return ret; }康托展开逆运算:已知在全排列中排第几,求这个排列vo
2020-12-14 16:53:22 367
原创 Codeforces Round 680 (Div. 1)___C. Team-Building —— 可撤销并查集 + 判奇环
题目链接:点我啊╭(╯^╰)╮题目大意: n个点,m条边的无向图,每个点都属于一个组 选取两个组的所有点,这些点组成的图无奇环 问有多少组对满足要求解题思路: 考虑求有多少非法组对 是否存在奇环的判断方法可以用并查集:
2020-11-16 16:17:54 327
原创 大板子 —— 9
——— 字符串 ————— KMP ——int nxt[maxn]; char a[maxn], b[maxn];void getNext(char p[]) { int i = 0, k = -1, len = strlen(p); nxt[i] = -1; while(i < len) { if(k == -1 || p[i] == p[k]) { if(p[++i] != p[++k]) nxt[i] = k; else nxt[i] = nxt[k]; // 注意
2020-10-29 18:55:55 359
原创 大板子 —— 8
——— 算法技巧 ————— 思维 —— 区间GCD int n, ans, a[maxn], l[maxn], v[maxn];int main() { scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%d", a+i), v[i] = a[i], l[i] = i; for(int i=1; i<=n; i++) for(int j=i; j; j=l[j]-1) { v[j] = __gcd(v[j],
2020-10-28 20:29:09 334
原创 大板子 —— 7
——— 计算几何 ————— 凸包 ——Andrew:int n;struct point { double x, y; point(){} point(double X, double Y) { x = X, y = Y; } point operator - (const point &A) { return point(x-A.x, y-A.y); } bool operator < (const point &A)const { if(x == A.x)
2020-10-28 19:58:12 368
原创 大板子 —— 6
——— 数据结构 ————— 分块 ——题目大意: 多次操作 区间取 minminmin 区间求第 kkk 小解题思路: 分块处理,设块大小为 ppp 块内排好序,查询时更新 二分答案,对整块直接 upper_bou
2020-10-27 20:50:53 295
原创 大板子 —— 5
——— 数学 ————— 组合数 ——一、 一般组合数计算若对ansansans取模,则无法保证下一步是否能被整除,所以只能对最后的结果取模时间复杂度:O(m)O(m)O(m)modmodmod的要求:无有效范围:1<=n,m<=601<=n,m<=601<=n,m<=60//一般方法求C(n,m)最后取模。C(62,28)溢出。有效范围1<n,m<=60ll C(int n, int m) { if(n<0 || m<0 ||
2020-10-27 20:29:41 330 1
原创 大板子 —— 4
——— 图论 ————— Dijkstra —— 最短路模板 —— Dijkstra+堆优化(高级版) Dijkstra + 堆优化(优先队列):const ll inf = (ll)1e16;int n, m; bool vis[N]; ll dis[N];vector <pii> g[N];struct Node{ int id; ll d; Node() {} Node(int id, ll d):id(id),d(d){} bool operator <
2020-10-25 21:24:14 585
原创 Johnson全源最短路
详细解法:Johnson全源最短路算法用于求边权带负的全源最短路模板题:P5905 【模板】Johnson 全源最短路令 disi,jdis_{i,j}disi,j 为从 iii 到 jjj 的最短路,在第 iii 行输出 ∑j=1nj×disi,j\sum\limits_{j=1}^n j\times dis_{i,j}j=1∑nj×disi,j#include<bits/stdc++.h>using namespace std;typedef long long ll;
2020-10-15 22:18:02 502
原创 快速阶乘算法
求: n! mod p\large n! \text{ mod } pn! mod p时间复杂度:Θ(nlogn)\Theta(\sqrt n \log n)Θ(nlogn)模板题:P5282 【模板】快速阶乘算法参考:P5282 【模板】快速阶乘算法(多项式运算+拉格朗日插值+倍增)//minamoto#include<bits/stdc++.h>#define R register#define ll long long#defin
2020-09-10 15:00:38 3597
原创 HDU多校第九场 1007 Game —— 区间左移 + FHQ Treap
题目链接:点我啊╭(╯^╰)╮题目大意: nnn 列木块,每列都有高度,两种操作: 1.1.1. 选择一个点 (x,y)(x, y)(x,y),从右往左推一格,有些格子会受到重力影响往下掉,并输出移动的木块数 2.2.2. 查询第 xxx 列的高度 最后输出所有列的高度解题思路:  
2020-08-26 19:52:48 305
原创 Treap + FHQ Treap
一:Treap支持:插入、删除、查询 xxx 的排名、查询排名为 xxx 的数、查前驱、查后继、左旋右旋模板题:P3369 【模板】普通平衡树#include<bits/stdc++.h>#define rint register int#define deb(x) cerr<<#x<<" = "<<(x)<<'\n';using namespace std;typedef long long ll;typedef pair <
2020-08-26 19:35:44 247
原创 HDU多校第七场 1008 Heart —— 子集dp + 卡常
题目链接:点我啊╭(╯^╰)╮题目大意: nnn 条弹幕,每条弹幕有两个值 ppp 和 bbb ppp 代表攻击力,bbb 代表由其二进制构成这条弹幕 一个必杀技 AAA 是 nnn 条弹幕的子集,且满足 u,v∈A,u≠v,bu∩bv=∅u,v∈A,u≠v, b_u∩b_v=∅u,v∈A,u=v,bu∩bv=∅ &n
2020-08-11 22:25:34 506
原创 牛客第八场 A All-Star Game —— 线段树分治 + 可撤销并查集
线段树分治即有撤销操作的时间分治多次询问,每次询问可以有一种操作,可以撤回这种操作若操作容易维护,但撤回操作不好弄,就可以离线下来将询问看做线段树的叶子节点,一次操作就是只在一段时间内有效因此就可以将这些操作按时间轴来区间覆盖,维护信息然后在线段树上dfs,进入节点时进行操作,离开时栈序撤销,到叶子就查询牛客第八场 E Explorer —— 可撤销并查集 + 线段树题目链接:点我啊╭(╯^╰)╮题目大意: n个球员,m个球迷,一个球员有多
2020-08-05 22:40:56 414
原创 牛客第五场 H Interval —— 主席树
题目链接:点我啊╭(╯^╰)╮题目大意: F(l,r)=Al&Al+1&...&ArF(l, r) = A_l \& A_{l+1} \& ... \& A_{r}F(l,r)=Al&Al+1&...&Ar S(l,r)={F(a,b)∣min(l,r)≤a≤max(l,r)}S(l, r) = \{F(a, b) | min(l,
2020-07-31 21:52:47 292
原创 String 函数
1. substr()对字符串进行截取 string s = "0123456789"; string sub1 = s.substr(5); // 从下标为5开始一直到结尾:sub1 = "56789" string sub2 = s.substr(5, 3); // 从下标为5开始截取长度为3位:sub2 = "567"2. c_str()返回一个指向正规C字符串的指针, 内容与本string串相同注意这是
2020-07-27 22:31:33 419
原创 HDU多校第二场 1007 In Search of Gold —— 二分 + 树形dp
题目链接:点我啊╭(╯^╰)╮题目大意: nnn 个点的树,每条边有两个权值 aaa 和 bbb 要求恰好选择 kkk 条边使其权值为 aaa,其他的边权值为 bbb 求最小直径解题思路: 容易想到树形 dpdpdp dp[i][j]dp[i][j]dp[i][j]
2020-07-26 22:12:26 236
原创 牛客第四场 A Ancient Distance —— 二分思维
题目链接:点我啊╭(╯^╰)╮题目大意: 给出一颗根为 111 的树,自由选择 KKK 个关键点 点 xxx 的最远距离为 xxx 到根的路径上遇到的第一个关键点的距离 整颗树的权值为所有最远距离的最小值 求 K=1,2...nK = 1,2...nK=1,2...n 的所有权值和解题思路:  
2020-07-25 21:47:41 338
原创 牛客第三场 H Sort the Strings Revision —— 笛卡尔树
题目链接:点我啊╭(╯^╰)╮题目大意: 给定一个长度为 nnn 的字符串 SSS,字符串满足 “01234567890123…”“01234567890123…”“01234567890123…” 给出数列 ppp 和 ddd,ppp 是一个排列 nnn 次操作,每次将 SSS 串的 p[i]p[i]p[i] 位置的数字替换成 d[i]d[i]d[i] ,得到
2020-07-23 23:50:57 275
原创 笛卡尔树
定义对于一个简单的序列:9,3,7,1,8,12,10,20,15,18,59, 3, 7, 1, 8, 12, 10, 20, 15, 18, 59,3,7,1,8,12,10,20,15,18,5pospospos 表示原序列中的位置,valvalval 表示该位置的值笛卡尔树具有如下两个性质:①:pos①:pos①:pos 满足二叉搜索树,左子树的 pospospos 小于根,右子树的 pospospos 大于根②:val②:val②:val 满足堆,左右子树的 valvalval 大于根
2020-07-23 23:12:37 377
原创 牛客第二场 E Exclusive OR —— FWT
题目链接:点我啊╭(╯^╰)╮题目大意: 给长度为 nnn 的数组 AAA,Ai≤218A_i ≤ 2^{18}Ai≤218 选出 iii 个数字 a1...aia_1 ... a_ia1...ai,使得a1⨁a2⨁...⨁aia_1\bigoplus a_2 \bigoplus ... \bigoplus a_ia1⨁a2⨁...⨁ai 最大 每个数
2020-07-17 19:12:15 202
原创 FWT
FWT 与或非 模板:P4717 【模板】快速沃尔什变换 (FWT)PS:取模操作常数较大,根据题目删改#include<bits/stdc++.h>#define rint register int#define deb(x) cerr<<#x<<" = "<<(x)<<'\n';using namespace std;typedef long long ll;typedef pair <int,int> pii;
2020-07-17 18:50:05 206
转载 C++ bitset 用法
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。常用函数 对于一个叫做bit的bitset: bit.size() 返回大小(位数) bit.count() 返回1的个数 bit.any() 返回是否有1 bit.none() 返回是否没有1 bit.set() 全都变成1 bit.set(p) 将第p + 1位变成1(bitset是从第0位开始
2020-07-16 23:06:37 869
原创 网格图网络流 —— 平面图转对偶图
对偶图一个图的对偶图如下:黑点为原图,红点为对偶图平面图每一个面是对偶图的每一个点平面图中面与面的割线是对偶图的边若平面图中某一条边只属于一个面,那么在对偶图中就是一个环边平面图周围无边界的面也是对偶图中的一个点网格图网络流如图,要求 (1,1)(1, 1)(1,1) 到 (n,m)(n, m)(n,m) 的最小割一条割边相当于一条杠,在网格图网络流中,源点和汇点不连通后,这些杠是连续的因此,就可以在割线上跑最短路,边权即为原图的权值然后要设最短路的源点和汇点,这里我们要使得左上
2020-07-16 18:45:38 2041
转载 C/C++整行读入字符串
C/C++如何整行读入字符串?在写代码的过程中,经常要一行一行的读入字符串进行处理,这里别人总结了一些方法,供大家参考。方法一:scanf() 读入 char[]使用方法:char str[1024];scanf("%[^\n]", &str);getchar(); 说明:在scanf函数中,可以使用%c来读取一个字符,使用%s读取一个字符串, 但是读取字符串时不忽略空格,读字符串时忽略开始的空格,并且读到空格为止,因此只能读取一个单词,而不是整行字符串。 其实scan
2020-07-15 22:52:23 975
原创 Educational CF Round 90___G. Pawns —— 线段树
题目链接:点我啊╭(╯^╰)╮题目大意: n∗nn * nn∗n 的图,mmm 次操作,规定第 kkk 列为特殊列 每次操作选定一个 (x,y)(x, y)(x,y),若没有棋子则出现一颗棋子,反之消失 棋子 (x,y)(x, y)(x,y) 只能往 (x+1,y−1)、(x+1,y)、(x+1,y+1)(x+1, y-1)、(x+1, y)、(x+1, y+1)
2020-07-02 12:55:15 575
原创 DFS树
参考:CF1325F Ehab’s Last Theorem(dfs树简单定义为一颗由 dfsdfsdfs 生成而来的树一颗 dfsdfsdfs树的边分为树边和非树边深色的是树边,浅色的是非树边dfsdfsdfs树的性质:①:每条非树边 (u,v)(u, v)(u,v) 都连向子树中某个点,且一定具有祖先关系②:子树之间不存在非树边因此 uuu 到 vvv 在树上的链 与 非树边 (u,v)(u, v)(u,v) 可以形成一个环,环的大小为 ∣dep[u]−dep[v]∣+1|dep[u]
2020-06-24 22:58:58 1195
原创 Educational CF Round 89___F. Jog Around The Graph —— dp + 凸包
题目链接:点我啊╭(╯^╰)╮题目大意: nnn 个点,mmm条边的带权无向图 设 S(i)S(i)S(i) 为走 iii 条边的路径最大权值和 求 ∑i=1qSi\sum_{i=1}^{q}S_i∑i=1qSi解题思路: 很容易分析出某一个 iii 的答案,是先走 kkk 条边到一个点,然后 i−ki-ki−
2020-06-23 21:16:05 379
原创 水平可见直线
题目:给出若干直线 y=kx+by=kx+by=kx+b,当从上往下看时,求所有可见的直线或者可以理解为一堆直线里 最上面的的那些直线题解:发现这些直线是下凸的,并且斜率递增namonamonamo求个下凸包即可,按照k从小到大,b从大到小的顺序 排序设栈顶的两条直线为 q[tail−1]q[tail-1]q[tail−1] 和 q[tail]q[tail]q[tail],当前直线为 l[i]l[i]l[i]若 q[tail−1]q[tail-1]q[tail−1] 与 q[tail]q[t
2020-06-23 20:37:21 285
原创 Codeforces Round 647 (Div. 1)___C. Johnny and Megans Necklace —— 欧拉回路
题目链接:点我啊╭(╯^╰)╮题目大意: 有 nnn 根木棍,一根木棍的两个端点有权值 两根木棍连接时,边权为两个连接端点的异或值的 lowbitlowbitlowbit 问将 nnn 根木棍全部连成环后,边权的最小值 最大为多少解题思路: 若最小值为 kkk,则 aaa 若能与 bbb 连边,需满足 a&
2020-06-18 22:27:08 209
原创 欧拉回路
定义如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)。如果一个回路是欧拉路径,则称为欧拉回路(Euler circuit)。具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。判定有向图回路:图联通 &&\&\&&& 每个点入度 === 出度无向图回路:图联通 &&\&\&&& 每个点的度数为偶数有向图通路:图联通 &
2020-06-18 21:57:12 345
原创 unordered_map 性能优化 与 重载
参考:stl中unordered_map的insert/clear 性能问题解决参考:关于map和unorderd_map的使用insert / clear 性能优化当插入元素过多时,发生了哈希碰撞,碰撞开链到一定的阈值,触发了增加 bucketbucketbucket,进而触发了 rehashrehashrehash因此,reservereservereserve 可以用来预留元素个数,rehashrehashrehash 根据提供的元素个数预留足够的bucket数目unordered_map
2020-06-17 10:08:41 3246
原创 Floyd’s Tortoise and Hare & 环检测算法
参考:Floyd判圈算法理解参考:Floyd判圈算法(龟兔赛跑算法, Floyd’s cycle detection)及其证明参考:Floyd’s Tortoise and Hare & 环检测算法简介Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm)。该算法由美国科学家罗伯特·弗洛伊德发明,是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,求出该环的起点与长度的算法。
2020-06-15 22:10:35 393
原创 Educational CF Round 86___F. Make It Ascending —— 子集dp
题目链接:点我啊╭(╯^╰)╮参考博客:点我啊╭(╯^╰)╮题目大意: nnn 个数字,要求用最少的操作 每次操作选择 iii 和 jjj,aj+=aia_j += a_iaj+=ai 最后生成单调递增的序列 并输出过程解题思路: 可以看出是分组选,每一组合并成
2020-06-05 22:50:44 291
原创 Codeforces Round 638 (Div. 2)___F. Phoenix and Memory —— 贪心 +线段树
题目链接:点我啊╭(╯^╰)╮题目大意: nnn 个人标号为 111 ~ nnn,顺序被打乱后 第 iii 个人的标号在 [Li,Ri][L_i, R_i][Li,Ri] 之间 保证答案存在,若答案唯一,则输出唯一答案 若不唯一,则输出任意两种答案解题思路: 考虑
2020-06-02 18:26:31 250
原创 Educational CF Round 87___F. Summoning Minions —— dp
题目链接:点我啊╭(╯^╰)╮题目大意: nnn 张牌,最多放 kkk 张,可以放了之后删掉 每张牌初始战力为 aia_iai,上场后场上所有牌的战力增加 bib_ibi 输出使最终战力和最大的方案解题思路: 鉴于昨天 dpdpdp 把 iii 写成 cntcntcnt 找了三个小时,这道题又没想出来,所以还是
2020-05-20 23:27:54 301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人