acm刷题
Syclus
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线段树专题
线段树原创 2023-01-07 12:11:25 · 244 阅读 · 0 评论 -
逆序对专题
逆序对原创 2022-07-30 17:01:45 · 222 阅读 · 0 评论 -
离散化专题
离散化专题,会一直更新原创 2022-07-31 09:01:54 · 290 阅读 · 0 评论 -
Flood Fill solve(ACwing)
ACWing刷题记录原创 2022-07-09 20:09:04 · 181 阅读 · 0 评论 -
prim算法+ Kruskal算法+匈牙利算法(超详细)
算法思路:(1)初始化所有点到集合的距离为正无穷;(2)for n次 迭代n次为了把所有点加到树中每次找出:不在集合内 && (第一次走||不在集合内的最小点)用最小点t更新所有点到集合的最小距离 最后把最小点t加入到集合内(标记为TRUE)代码:#include<stdio.h>#include<iostream>#include<a...原创 2022-05-02 11:24:52 · 434 阅读 · 0 评论 -
前缀和题单训练
一维前缀和模板:#include<stdio.h>#include<iostream>#include<algorithm>#define N 100010using namespace std;int a[N];int main(){ int n,m; cin>>n>>m; a[0]=0; for(int i=1;i<=n;i++) { cin>>a[i]; a[i]=a[i]+a[i-1原创 2022-05-02 11:12:30 · 501 阅读 · 0 评论 -
蓝桥杯刷题记录:2020第十一届C++省赛真题(待更新)
只收录价值题哈哈哈T1:走方格DP写法:#include<bits/stdc++.h>#include<cstring>#define N 35using namespace std;int n,m,k;int dp[N][N];int main(){ cin>>n>>m; if(n%2==0 && m%2==0) { cout<<"0"<<endl; return 0; }原创 2022-05-02 11:12:11 · 183 阅读 · 0 评论 -
背包问题有感
01二维:二维下的状态定义f[i][j]是前 i件物品,背包容量 j下的最大价值#include<stdio.h>#include<iostream>#include<algorithm>#include<cstring>#define N 1005using namespace std;int v[N],w[N];int f[N][N];int n,m,k;int main(){ cin>>n>>m;原创 2022-05-01 10:48:33 · 244 阅读 · 0 评论 -
基础题复习
n进制转m进制:#include <iostream>using namespace std;int ito(char a){ if(a=='A') return 10; if(a=='B') return 11; if(a=='C') return 12; if(a=='D') return 13; if(a=='E') return 14; if(a=='F') return 15; return int(a-'0');}char oti(int a原创 2022-04-07 09:40:32 · 309 阅读 · 0 评论 -
BFS题集(待更新)
马的移动:题目描述小明很喜欢下国际象棋,一天,他拿着国际象棋中的“马”时突然想到一个问题:给定两个棋盘上的方格a和b,马从a跳到b最少需要多少步?现请你编程解决这个问题。提示:国际象棋棋盘为8格*8格,马的走子规则为,每步棋先横走或直走一格,然后再往外斜走一格。输入输入由两个方格组成,每个方格包含一个小写字母(a~h),表示棋盘的列号,和一个整数(1~8),表示棋盘的行号。输出输出一行"xx->yy:n”。样例输入Copye2 e4样例输出Copy..原创 2022-04-07 09:13:09 · 235 阅读 · 0 评论 -
DFS题集(待更新)
题目描述一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:阵列4 100234500067103456050020456006710000000089有4个细胞。输入第一行输入2个整数n和m(均不大于60)然后输入n行 每行m个数字(0到9之间,中间没有空格)输出输出一个整数,表示细胞数样例输入Copy4 1002345000671034560500...原创 2022-04-07 09:11:56 · 198 阅读 · 0 评论 -
日期计算有感
作者:上进小菜猪链接:https://www.zhihu.com/question/451743472/answer/2391455764来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。世纪末的星期曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日,如果是星期一则会…有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!于是,“谣言制造商”又修改为星期日…1999年的12月31日是星期五.转载 2022-04-06 19:52:06 · 247 阅读 · 0 评论 -
蓝桥杯刷题记录:第七届C++省赛真题(待更新)
T1四平方和:(二分)//二分写法 #include<stdio.h>#include<iostream>#include<algorithm>#include<cstring>#define N 5000010using namespace std;struct sum{ int s,c,d; bool operator< (const sum &t) const{ if(s!=t.s) return s<原创 2022-04-04 17:15:53 · 1510 阅读 · 2 评论 -
蓝桥杯刷题记录:第八届C++省赛真题(待更新)
T1分巧克力:二分代码:#include<stdio.h>#include<iostream>#include<algorithm>#define N 100010 using namespace std;int n,k;int h[N],w[N];bool check(int mid){ int sum=0; for(int i=0;i<n;i++)//看看每一块巧克力能切出的总数 { sum+=(w[i]/mid)*(h[i原创 2022-04-03 20:59:03 · 462 阅读 · 0 评论 -
蓝桥杯刷题记录:2021第十二届C++省赛真题(待更新)
T1:砝码称重原题链接:https://www.dotcpp.com/oj/problem2604.htmlDP代码:(100分)#include<stdio.h>#include<algorithm>#include<iostream>using namespace std;const int N=110,M=2e5+10;int sum,n,w[N];bool f[N][M];int main(){ int n; cin>&g原创 2022-04-02 17:43:22 · 1230 阅读 · 0 评论 -
邮票问题(动态规划)
题目意思:设有已知面额的邮票m种,每种有n张,用总数不超过n张的邮票,能从面额1开始,最多连续组成多少面额。(1≤m≤100,1≤n≤100,1≤邮票面额≤255)输入第一行:m,n的值,中间用一空格隔开。第二行:A[1..m](面额),每个数中间用一空格隔开。输出连续面额数的最大值样例输入Copy3 41 2 4样例输出Copy14代码:#include<stdio.h>#include<iostream>#...原创 2022-03-19 15:25:30 · 2108 阅读 · 0 评论 -
搞懂错排公式
问题:现有10本书按照顺序摆放,现要求重新排列,使得新的书的顺序中每一本书都不在原来的位置,求有多少种排列方式?这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n)。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题OK,现在详细分析这个问题,我们要的最终结果就是书的编号与所在位置的编号不同,在这里,我们把n本书的错排操作数记为D(n),那n-1本就是D转载 2022-03-25 09:29:02 · 221 阅读 · 0 评论 -
集合的划分(递归)
题目描述设S是一个具有n个元素的集合,S={a1,a2,……,an},现将S划分成k个满足下列条件的子集合S1,S2,……,Sk ,且满足:则称S1,S2,……,Sk是集合S的一个划分。它相当于把S集合中的n个元素a1 ,a2,……,an 放入k个(0<k≤n<30)无标号的盒子中,使得没有一个盒子为空。请你确定n个元素a1 ,a2 ,……,an 放入k个无标号盒子中去的划分数S(n,k)对1e9+7取余之后的值。输入n,k输出S(n,k) mod 1e9+7 的值样例输入Copy.原创 2022-03-17 14:49:21 · 627 阅读 · 0 评论 -
区间和(思维题)
题目描述小红有一个秘密的数组a,你知道这个数组a的长度是n。小红会给你q个提示,第i个提示是告诉你数组a中l到r连续元素的区间和。问你能否根据小红的这q个提示知道数组a中所有元素的和?如果能,输出Yes;否则,输出No。输入第一行两个整数n(1<=n<=200000)和q(1<=q<=200000),接下来有q行,每行两个数字l和r(1<=l<=r<=n)。输出如果能,输出Yes;否则,输出No。样例输..原创 2022-03-17 14:22:45 · 6642 阅读 · 0 评论 -
深入浅出学算法059-挖地雷(动态分析)
题目描述在一个地图上有N个地窖(N<=200),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径,并规定路径都是单向的,也不存在可以从一个地窖出发经过若干地窖后又回到原来地窖的路径。某人可以从任一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使他能挖到最多的地雷。输入第一行输入一个整数N第2行输入N个整数,表示每个地窖的地雷数之后有若干行表示2个地窖之间有路径,输入 0 0代表结束输出第一行输出挖地雷的顺序原创 2022-03-16 21:38:13 · 901 阅读 · 0 评论 -
最短路问题(动态规划解法)
题目描述下图表示城市之间的交通路网,线段上的数字表示费用,单向通行由A->E。试用动态规划的最优化原理求出A->E的最省费用输入输入整数n表示有n个城市然后是n行n列数据,第i行n个数据表示城市i到各个城市之间的距离,如果没有路径到达该城市,则数据为0输出输出最短路径值及经过的城市,格式见样例样例输入Copy100 2 5 1 0 0 0 0 0 00 0 0 0 12 14 0 0 0 00 0 0 0 6..原创 2022-03-16 19:05:23 · 1836 阅读 · 1 评论 -
五种最短路径算法的总结(待更新)
最短路径算法:1:Dijkstra 2:Floyd 3:Bellman-Ford 4:SPFA 5:A*这五种最短路径算法初学的时候非常容易混淆,因为他们的松弛方法都差不多,而他们的核心却又与松弛有着很密切的关系,所以很难去辨别区别。1:DijkstraDijkstra算法适用于单源最短路,也就是从一个点到终点,过程比较贪心,逻辑上是寻求最近点来逐步拓展,以达到局部最优的效果,再由局部最优一一推出全局最优实现过程:建立dist数组存与原点的距离1:从全部点中找离确定点(一开始...原创 2022-03-12 14:33:05 · 3844 阅读 · 0 评论 -
1420: 深入浅出学算法103-工作分配问题
题目描述设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij。试设计一个算法,为每一个人都分配一件不同的工作,并使总费用达到最小。设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小输入由文件job.in给出输入数据。第一行有1个正整数n (1≤n≤20)。接下来的n行,每行n个数,第i行表示第i个人各项工作费用。输出将计算出的最小总费用输出到文件job.out。样例输入Copy34 2 52 3 63 4 5样例.原创 2022-03-12 14:28:01 · 720 阅读 · 0 评论 -
没有上司的舞会(树形DP+DFS)
Ural大学有N名职员,编号为1~N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 Hi 给出,其中1≤i≤N,1≤i≤N1\leq i\leq N,1\leq i\leq N1≤i≤N,1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。输入第一行一个整数N。接下来N行,第 i 行表示 i 号职员的快乐指数Hi。.原创 2022-03-12 13:30:34 · 145 阅读 · 0 评论 -
地宫取宝(四层DP难度题)
题目:X 国王有一个地宫宝库,是n×mn×m个格子的矩阵,每个格子放一件宝贝,每个宝贝贴着价值标签。地宫的入口在左上角,出口在右下角。小明被带到地宫的入口,国王要求他只能向右或向下行走。走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。当小明走到出口时,如果他手中的宝贝恰好是kk件,则这些宝贝就可以送给小明。请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这kk件宝贝。输入格式第一行33个...原创 2022-03-09 18:51:09 · 206 阅读 · 0 评论 -
最长上升子序列(dp)
最长上升子序列:不用严格相邻,只要上升就行代码:#include<stdio.h>#include<iostream>#include<algorithm>#define N 1010using namespace std;//只要是上升就行,不用严格连着 int a[N],f[N];int main(){ int n,k; cin>>n; for(int i=1;i<=n;i++) cin>>a[i];原创 2022-03-09 14:27:40 · 120 阅读 · 0 评论 -
摘花生(路线DP)
Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。Hello Kitty只能向东或向南走,不能向西或向北走。问Hello Kitty最多能够摘到多少颗花生。输入格式第一行是一个整数T,代表一共有多少组数据。接下来是T组数据。每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C。每组数据的原创 2022-03-07 15:02:17 · 151 阅读 · 0 评论 -
裴蜀定理打表(凑不出的最大数)(dfs+数学问题)
凑数公式:最大凑不出数m=(p-1)(q-1)-1裴蜀定理:若p,q最大公约数为d,那么一定存在整数a,b使ap+bq=d,若ab互质,则存在xy使ax+by=1.打表代码:#include<stdio.h>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int n,k;bool dfs(i原创 2022-03-06 11:12:17 · 376 阅读 · 0 评论 -
K倍区间(前缀和优化)
给定一个长度为 NN 的数列,A1,A2,…ANA1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…AjAi,Ai+1,…Aj 之和是 KK 的倍数,我们就称这个区间 [i,j][i,j] 是 KK 倍区间。你能求出数列中总共有多少个 KK 倍区间吗?输入格式第一行包含两个整数 NN 和 KK。以下 NN 行每行包含一个整数 AiAi。输出格式输出一个整数,代表 KK 倍区间的数目。数据范围1≤N,K≤1000001≤N,K≤100000,1≤Ai≤100000原创 2022-03-06 10:23:48 · 6673 阅读 · 0 评论 -
激光炸弹(前缀和)
#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;const int N=5010;int n,m;//地图总大小 int s[N][N];//预处理作用,多开一个存质量w的话会超限 int main(){ int cnt,r; cin>>cnt>>r; r=min(5001,r); n=m=r;//设成正方形的话会避免有.原创 2022-03-05 21:15:24 · 148 阅读 · 0 评论 -
kkksc03考前临时抱佛脚(DFS)
题目背景kkksc03 的大学生活非常的颓废,平时根本不学习。但是,临近期末考试,他必须要开始抱佛脚,以求不挂科。题目描述这次期末考试,kkksc03 需要考44科。因此要开始刷习题集,每科都有一个习题集,分别有s_1,s_2,s_3,s_4s1,s2,s3,s4道题目,完成每道题目需要一些时间,可能不等(A_1,A_2,\ldots,A_{s_1}A1,A2,…,As1,B_1,B_2,\ldots,B_{s_2}B1,B2,…,Bs2,C_1,C_2,\ldo...原创 2022-02-24 08:17:42 · 553 阅读 · 0 评论 -
八皇后 Checker Challenge
题目描述一个如下的6 \times 66×6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列2\ 4\ 6\ 1\ 3\ 5246135来描述,第ii个数字表示在第ii行的相应位置有一个棋子,如下:行号1\ 2\ 3\ 4\ 5\ 6123456列号2\ 4\ 6\ 1\ 3\ 5246135这只是棋子放置的一个解。请编一个程序找出所有棋...原创 2022-02-23 21:51:52 · 152 阅读 · 0 评论 -
最短路径(Dijkstra算法)+堆优化做法
给定一个 nn 个点 mm 条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出 11 号点到 nn 号点的最短距离,如果无法从 11 号点走到 nn 号点,则输出 −1−1。输入格式第一行包含整数 nn 和 mm。接下来 mm 行每行包含三个整数 x,y,zx,y,z,表示存在一条从点 xx 到点 yy 的有向边,边长为 zz。输出格式输出一个整数,表示 11 号点到 nn 号点的最短距离。如果路径不存在,则输出 −1−1。数据范围1≤n≤5001≤n≤50原创 2022-02-23 16:22:31 · 948 阅读 · 0 评论 -
完全背包(一维)——dp思想
#include<stdio.h>#include<iostream>#include<algorithm>#include<cstring>using namespace std;#define N 110int dp[N],c[N],w[N],n[N];//dp总金额 int main(){ int t,sum; int m,k; cin>>t; while(t--) { cin>>sum>&.原创 2022-02-21 21:02:30 · 230 阅读 · 0 评论 -
有向图的拓扑序列(BFS)
给定一个 nn 个点 mm 条边的有向图,点的编号是 11 到 nn,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1−1。若一个由图中所有点构成的序列 AA 满足:对于图中的每条边 (x,y)(x,y),xx 在 AA 中都出现在 yy 之前,则称 AA 是该图的一个拓扑序列。输入格式第一行包含两个整数 nn 和 mm。接下来 mm 行,每行包含两个整数 xx 和 yy,表示存在一条从点 xx 到点 yy 的有向边 (x,y)(x,y)。输原创 2022-02-20 15:55:01 · 1116 阅读 · 0 评论 -
图中点的层次(BFS)
给定一个nn个点mm条边的有向图,图中可能存在重边和自环。所有边的长度都是11,点的编号为1∼n1∼n。请你求出11号点到nn号点的最短距离,如果从11号点无法走到nn号点,输出−1−1。输入格式第一行包含两个整数nn和mm。接下来mm行,每行包含两个整数aa和bb,表示存在一条从aa走到bb的长度为11的边。输出格式输出一个整数,表示11号点到nn号点的最短距离。数据范围1≤n,m≤1051≤n,m≤10...原创 2022-02-20 14:56:18 · 261 阅读 · 0 评论 -
树的重心(BFS)
给定一颗树,树中包含 nn 个结点(编号 1∼n1∼n)和 n−1n−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。输入格式第一行包含整数 nn,表示树的结点数。接下来 n−1n−1 行,每行包含两个整数 aa 和 bb,表示点 aa 和点 bb 之间存在一条边。输出格式输出一个整数 mm,表示将重心删除后,剩余各个连通块中点数的原创 2022-02-20 14:19:11 · 651 阅读 · 0 评论 -
走迷宫(BFS)
题解: 最经典的BFS题,之前一直搞不清楚为什么要用队列来存点,现在搞懂了,因为离原点距离小的放队头,后一层的放队尾,依次出队短点,这样方便出队短点,取新的队头。对于队列的理解,也就是按离原点的距离排优先级,距离短的先全部入队,依次将他们作为队头来扩展,再出队所有队头,这样下一层的点也就顺理成章地成为队头了,再依次扩展直到把地图上所有空点都赋上距离,至于主体部分倒没什么困难,最后再取出终点的距离就行了...原创 2022-02-20 09:25:58 · 613 阅读 · 0 评论 -
全排列(DFS)
//经典DFS:全排列 #include<cstdio>#include<iostream>#include<algorithm>const int N=10; using namespace std;int n,m,j,k;int path[10];bool st[10];//用于标记数字用过没 void dfs(int u){ int i; if(u==n)//生成一个数 { for(i=0;i<n;i++) printf.原创 2022-02-16 14:20:23 · 295 阅读 · 0 评论 -
格子游戏(并查集)——信奥一本通
题目:Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边:直到围成一个封闭的圈(面积不必为1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了(n <= 200),他们的游戏实在是太长了!他们甚至在游戏中都不知道谁赢得了游戏。于是请你写一个程序,帮助他们计算他们是否结束了游戏?输入:输入数据第一行为两个整数n和m。m表示一共画了m条线。以后m行,每行首先有两个数字(x, y),代表了画线.原创 2022-02-10 14:16:55 · 348 阅读 · 0 评论
分享