- 博客(66)
- 资源 (1)
- 收藏
- 关注
原创 数位DP样题
数位dp的题目一般会问,某个区间内,满足某种性质的数的个数。1. 利用前缀和,比如求区间[l,r]中的个数,转化成求[0,r]的个数 [0,l-1]的个数。2. 利用树的结构来考虑(按位分类讨论)
2023-03-06 20:56:49
520
原创 Codeforces Round #841 (Div. 2) and Divide by Zero 2022 A-D
等System test的时候顺便水一篇吧233
2022-12-28 10:07:40
1091
11
原创 FFT求多项式乘积
而如果我们先求出若干个点的坐标(多少个点根据最后算出的会是几次多项式而定,比如A是三次多项式,B是五次多项式,算出来的C会是八次多项式,那么就需要找九个点),最后再根据这些点把多项式还原成系数表示,但是对于每个点,知道一个横坐标,需要(d+1)次计算才能知道这个点的纵坐标,总复杂度还是会达到。现在推广到d阶多项式,我们要先取n>d个点,(并且n等于2的整数次幂),我们为求解多项式乘积所选取的点就是1的n个n次方根。算出来的值,原问题变成了两个子问题,每个子问题的次数是原问题的。
2022-12-26 10:22:10
1231
原创 二分图的判定&最大匹配
如果一张无向图的N个结点可以分成A,B两个非空集合,其中A∩B=∅,并且在同一集合内的点之间都没有边相连,则称这张图为二分图。
2022-11-24 11:15:56
603
原创 普通平衡树Treap
tree是binery search tree(BST),用heap的性质维护BST的平衡(尽可能让每个结点的左右子树大小相近,避免特殊数据让单词操作的复杂度退化为。注意: 数据保证查询的结果一定存在。
2022-10-11 21:43:20
268
原创 求区间内共有多少种数字(莫队、树状数组、线段树、主席树)
此题数据较弱,不强制在线,O(nn)可以过开桶记录每个数据的个数,删除:从1->0即少了一个种类;添加:从0->1即多了一个种类。那就把数据加强QAQ然鹅这么惨烈吗。。。对于若干个询问的区间[l,r],如果他们的r都相等的话,那么项链中出现的同一个数字,一定是只关心出现在最右边的那一个的,例如:项链是:1 3 4 5 1。...
2022-08-28 23:53:22
987
原创 算法整理(五)
(1)存在欧拉路径的充分必要条件:要么所有点的出度均等于入度, 要么除了两个点之外,其余所有点的出度等于入度,剩余的两个点:一个满足出度比入度多1(起点),另一个满足入度比出度多1(终点)设 G为有 n 个顶点的带权有向无环图,G 中各顶点的编号为 1 到 n,请设计算法,计算图 G 中 1, n 间的最长路径。欧拉路径:欧拉路是指从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边通过的且只通过一次。(1)存在欧拉路径的充分必要条件:度数为奇数的点只能是0个或者2个。
2022-08-22 16:10:00
308
原创 算法整理(四)
有一个长为 n 的序列,以及一个大小为 k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。单调队列与普通队列不一样的地方就在于单调队列既可以从队首出队,也可以从队尾出队。用deque。9.2 栈9.2.1 单调栈快速获得每个数之后一个比它大(小)的元素,时间复杂度为O ( n )9.3 链表特殊约瑟夫问题(链表):编号为1…N的N个小朋友玩游戏,他们按编号顺时针围成一圈,从第一个人开始按逆时针次序报数,报到第M个人出列;然后再从下个人开始按顺时针次
2022-08-22 16:08:06
412
原创 算法整理(三)
取石子:有一堆石子,一共N个石子,两个人轮流拿石子,每次最多取M个,最少取1个。先取完的人获胜。(两人足够聪明)输入两个整数 n, m。1
2022-08-22 16:05:04
309
原创 算法整理(二)
前面的因为超字数发不了了,所以只好分成几篇发。。。编写程序对给定的有向图(不一定连通)进行深度优先遍历,图中包含n个顶点,编号为0至n-1。本题限定在深度优先遍历过程中,如果同时出现多个待访问的顶点,则优先选择编号最小的一个进行访问,以顶点0为遍历起点。4.1.2 排列数和组合数排列数按照字典序输出n的全排列。组合数Gosper’s Hack是一种生成n元集合所有k元子集的算法。4.1.3 树的遍历树的深度优先遍历调用根结点dfs(root)dfs(root)dfs(root)树的DF
2022-08-22 15:58:35
312
原创 博弈论之SG函数
给定一个有向无环图,图中有一个唯一的起点,在起点上放一枚棋子,两名玩家交替的把这枚棋子沿有向边进行移动,每次可以移动一步,无法移动者判负。可以斩三堆使得n
2022-08-16 19:56:09
826
原创 2019河北省大学生程序设计竞赛部分题题解
从0开始往上暴力搜索,本以为会TLE却没有,或许答案必然在一个较小的范围内是可证的?拓扑排序,从入度小的地方开始(应该算是一种贪心?),一对点一对点地拆。快速乘&快速幂&逆元。区间DP,逆向思考。...............
2022-08-08 20:08:12
970
原创 DFS对树的遍历及一些优化
调用根结点dfs(root)dfs(root)dfs(root)树的DFS序对树进行深度优先遍历时,对于每个结点,在刚进入递归后以及即将回溯时各记录一次结点编号,每个结点x在序列中恰好出现两次。树的深度树的重心有的时候题目不给明哪个是根结点(所有节点都可以是根结点),可以通过一次dfs找到树的重心来尽量避免“树大根深”的情况。树的重心:设max_part(x)表示在删除结点x后产生的子树中,最大的一棵的大小。使得max_part取最小值的结点p即为树的重心。2018HBCPC的一道题:找
2022-07-29 21:14:55
607
原创 为了一劳永逸而写的数独
的数,用row[x]&col[y]&cell[x/3][y/3]可以查到该空格可以填哪些数,那就老老实实搜索这些数吧233,可以用lowbit获得二进制下为1的每一位,将其转化成十进制数(1的位置对应的位数,可以预先处理出来)。这其实是跟大家做数独的时候的朴素感知是一样的,从可选的数少的空格开始试探。所以我们在每次搜索时都判断一下哪个格子的可选到数最小(可以预先处理出来可能会用到的所有二进制数里1的个数,用时直接调用)。记录每个格子可选的数,可以用二进制状态压缩,开九位表示九个数。...
2022-07-22 10:54:08
216
原创 基础莫队——对询问分块
以内,右端点变化是单调的。以上一次询问[L,R]为基础,,求[L’,R’],只需要一步步转移,花费。询问若干个区间内的情况将这些区间重新排序,尽量让前一个区间跳到后一个区间时变化较小。区间已经被重新排序过,所以要先把答案储存下来,在区间原位置编号处输出。先把所有询问[l,r]读入,把这些询问按照左端点递增排序,然后分成。加了一点组合数,每个区间长度是len,分母就是。这样一来,相邻两个询问的左端点变化在。添加从0->1即多了一个种类。,分子分母约分后记录下来。处理右端点,时间复杂度。......
2022-07-14 20:06:24
282
原创 树状数组&逆序对
任意给定一个集合a,用t[val]保存数值val1在集合a内出现的次数,那么数组t在[l,r]上的区间和∑i=1rt[i]\sum_{i=1} ^{r} t[i]∑i=1rt[i]就表示集合a中范围在[l,r]内的数有多少个。可以在集合a的数值范围上建立一个树状数组来维护t的前缀和。对于给定的序列a,倒序扫描之,对于每个数a[i]:数值范围较大时可以先离散化。241. 楼兰图腾第一遍输入同时正序扫描,可以保存下每个数前面比它大的数的个数和比它小的数的个数。第二遍逆序扫描,求出每个数后面比它大的数的个数和
2022-07-12 21:23:47
264
原创 2022NEUQACM暑假集训(一)
G. University ClassesBM. Weather TomorrowCA. Union of Doubly Linked ListsDB. Preparing for Merge SortEC. Sum of Nestings先确定一个上限,比较显然:这样排列 ((((…)))) 括号嵌套最多。这样得到的上限是 k
2022-07-09 21:13:28
325
原创 并查集题选
PTA 家庭房产给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产:其中是每个人独有的一个4位数的编号;和分别是该编号对应的这个人的父母的编号(如果已经过世,则显示);(0≤≤5)是该人的子女的个数;是其子女的编号。首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输出每个家庭的信息:其中人均值要求保留小数点后3位。家庭信息首先按人均面积降序输出
2022-07-08 22:12:24
252
原创 P7771 【模板】欧拉路径
求有向图字典序最小的欧拉路径。第一行两个整数 n,mn,mn,m 表示有向图的点数和边数。接下来 mmm 行每行两个整数 u,vu,vu,v 表示存在一条 u→vu\to vu→v 的有向边。如果不存在欧拉路径,输出一行 。否则输出一行 m+1m+1m+1 个数字,表示字典序最小的欧拉路径。样例输出 #1样例 #2样例输入 #2样例输出 #2样例 #3样例输入 #3样例输出 #3提示对于 50%50\%50% 的数据,n,m≤103n,m\leq 10^3n,m≤103。对于 1
2022-06-16 20:56:53
357
原创 2021 RoboCom 世界机器人开发者大赛-本科组(初赛)
LATER__if (time==1&&diamond==1) { 7-2="Accept"; 7-3="Accept";} 7-1 懂的都懂分数20众所周知,在互联网上有很多话是不好直接说出来的,不过一些模糊的图片仍然能让网友看懂你在说什么。然而对这种言论依然一定要出重拳,所以请你实现一个简单的匹配算法。现在我们采集了原图的一些特征数据,由N个小于 255 的非负整数组成,假设对于给定的若干张由Mi个同样小于 255 的非负整...
2022-05-27 14:24:49
393
原创 数学&算法芝士(才写了一点点)
文章目录质数质数的筛选埃氏筛法欧拉筛法质因数分解约数质数质数的筛选埃氏筛法扫描到每个x时,将x的倍数标记成合数。扫描到一个数而该数未被标记的时候,该数就是质数。可以发现,小于x2x^2x2的x的倍数之前已经被比x小的数标记过了,所以只需要从x2x^2x2开始标记就行了。时间复杂度:O(NloglogN)O(NloglogN)O(NloglogN)void prime(int n){ memset(v,0,sizeof(v));//合数标记 for(int i=2;i<=n;i++)
2022-05-26 23:19:46
185
1
原创 Codeforces Round #793 (Div. 2) A B C
爆惨的一场:(题目还是有一定思维水准的。A — Palindromic Indices题目大意:给一回文串,删掉该串中的一个字符使之仍然是回文串的情况有多少种?删掉一个字符之后会重新对齐,思考一下即可发现关键是中间位置有多少个连续的相同的字符。#include<bits/stdc++.h>using namespace std;int t;int main(){ cin>>t; while(t--) { int n,cnt=0; string s;
2022-05-23 23:13:24
233
原创 Segment Tree——线段树入门
线段树是一种基于分治思想的二叉树结构,用于在区间上进行统计。每个节点代表一个区间,对于每个内部节点[l,r](编号p),左子节点代表区间[l,mid](编号p2),右子节点代表区间[mid+1,r](编号p2+1).可以用结构体数组保存一棵线段树,数组大小开到N*4P2068 统计和定义线段树struct segment_tree{ int l,r; long long sum;}tree[100010*4];建树void build(int p,int l,int r){ tre
2022-05-16 22:24:18
366
原创 Trie字典树
文章目录[P2580 于是他错误的点名开始了](https://www.luogu.com.cn/problem/P2580)[P5149 会议座位](https://www.luogu.com.cn/problem/P5149)[143. 最大异或对](https://www.acwing.com/problem/content/145/)[P4551 最长异或路径](https://www.luogu.com.cn/problem/P4551)[P6824 「EZEC-4」可乐](https://www
2022-05-06 19:06:08
429
原创 Codeforces Round #786 (Div. 3) A,B,C,D,E
Codeforces Round #786 (Div. 3)A. Number Transformation题目大意:给出两个数x,y,判断是否存在a,b使得x∗ba=yx*b^a=yx∗ba=y.数据范围很小,直接暴力完事。#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>#include<map>
2022-05-03 20:04:28
393
原创 Codeforces Round #785 (Div. 2) A,B,C
Codeforces Round #785 (Div. 2)A. Subtle Substring Subtraction题目大意:两人博弈,A只能删除偶数个字符的子串,B只能删除奇数个字符的子串,a-z 被删除的得分分别是是 1-26,问最终的差值和获胜的人A先走,如果是偶数的直接全删,如果是奇数的就考虑左右端点的两个,留一个分值最小的给后手,只有字符串只有一个字母的情况下B才能赢。#include<bits/stdc++.h>using namespace std;int t;
2022-05-02 19:52:10
997
原创 Huffman树,Huffman编码
哈夫曼树:带权路径长度WPL最短的多叉树(最优多叉树)考虑构造一棵包含n个叶子结点的k叉树,其中第i个叶子节点带有权值wiw_iwi,要求最小化∑wi∗li\sum{w_i*l_i}∑wi∗li,其中lil_ili表示第i个叶子节点到根节点的距离。——李东煜《算法竞赛进阶指南》先看一道简单的二叉哈夫曼树:P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G每次取出堆顶的两个合并入堆即可。#include<bits/stdc
2022-04-21 22:24:44
780
原创 二叉堆操作
天梯赛L2 关于堆的判断 (25 分)将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点; x and y are siblings:x和y是兄弟结点; x is the parent of y:x是y的父结点; x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[
2022-04-02 15:16:05
181
原创 天梯赛 L2 链表去重&&重排链表
7-28 链表去重 (25 分)给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。输入格式:输入在第一行给出 L 的第一个结点的地址和一个正整数 N(≤105,为结点总数)。一个结点的地址是非负的 5 位整数,空地址 NULL 用 -1 来表示。
2022-04-02 11:24:32
235
1
原创 二叉树的遍历相关问题
文章目录二叉树的四种遍历方法给定前序+中序,后序输出给定后序+中序,前序输出给定前序+中序,层序输出给定后序+中序,层序输出给定完全二叉树后序,层序输出首先要了解二叉树的四种遍历方法。这篇博客讲得非常清楚了,我就不再赘述。前序:9 2 3 1 7 5 4 6 8中序:3 1 2 7 9 4 5 8 6后序:1 3 7 2 4 8 6 5 9层次:9 2 5 3 7 4 6 1 8可以观察出,前序的第一个元素(后序的最后一个元素)9可在中序中划分出左右子树,在左右子树中可以如法炮制,直到叶结
2022-03-26 21:37:37
1884
原创 三阶魔方入门级学习
文章目录起因:认识魔方:复原步骤:任务一:拼好底层(设底层为白)目标1:在顶层(黄)中心块周围安排四个白色棱块目标2:将目前在顶层的四个白色棱块分别对准侧面中心块颜色后调整到底面目标3:将底层四个角块安排好任务二:拼好中间层任务三:拼顶层目标1:拼顶面黄色十字目标2:将顶面黄色拼好目标3:将顶层四个角块对好目标4:将顶层四个棱块调整好结果起因:我妹:“谁把我魔方打乱了!!!???555拼不回去,老姐你帮我拼回去。。。”我:若干分钟后拼出一面,继续不下去,打开b站,开始学习。。。认识魔方:六个面:国标
2022-03-20 23:19:08
3083
原创 P4305 [JLOI2011]不重复数字 三种方法
STL unordered_map这是最好懂的一种办法,看到题目第一眼会想到桶,但是数据范围不够开,所以可以把这个搬出来。但是需要编译器配置到C++11…//2.18s / 2.60MB / 517B C++14 (GCC 9)#include<bits/stdc++.h>using namespace std;unordered_map<int,int>mp;int T,n;inline int read(){ int x=0,f=1;char ch=get
2022-03-18 21:23:40
2246
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人