![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 77
p__| wYw |__q
这个作者很懒,什么都没留下…
展开
-
高级搜索之迭代加深算法详解
可能很多初学者看到了迭代加深搜索这个名字就感觉“哇,好高级啊,学起来一定很复杂。”但是事实却不是这样,只要你有过BFS和DFS的基础,理解起来其实是非常容易的。为了形象地解释迭代加深搜索(IDDFS,Iterative Deepening Depth-first Search。网上找了一下,发现并没有这个全称。)从图中可以看出,从起点开始搜索。使用DFS,搜到的第一个解便是X3。而使用BF...原创 2019-04-25 13:35:10 · 2558 阅读 · 3 评论 -
C++题解:P1894 [USACO4.2]完美的牛栏The Perfect Stall —— 求二分图的最大匹配算法其一:匈牙利算法 (增广路,匹配,最大匹配)
在看这道题之前,我们先来了解一下什么是二分图及与二分图匹配的相关概念及基础知识。基础知识故名思义,二分图本质上还是由点和边构成的数据结构,与之不同的是,二分图相当于把一张图分成了两个部分,也就是两个部。部与部之间的点没有边相连,以下的几个图都可以算作二分图:(图中的箭头无意义,并不代表有向边)现在来简单说一下匹配和最大匹配(因为只涉及匈牙利算法,所以不讲其他杂七杂八的东西。最小点覆盖什么的...原创 2019-04-18 13:45:58 · 495 阅读 · 0 评论 -
C++二分图匹配基础:zoj1002 FireNet 火力网
直接给出题目吧。。。问题 D(1988): 【高级算法】火力网时间限制: 1 Sec 内存限制: 128 MB题目描述给出一个N*N的网格,用’.'表示空地,用’X’表示墙。在网格上放碉堡,可以控制所在的行和列,但不能穿过墙。问:最多能放多少个碉堡?输入第1行:一个整数N(N<=20)接下来N行,每行N个字符输出第1行:1个整数,表示最多可放碉堡数。样例输入4....原创 2019-04-26 13:42:16 · 667 阅读 · 0 评论 -
C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速
Matrix Power Seriesr时间限制: 1 Sec 内存限制: 512 MB题目描述给定矩阵A,求矩阵S=A1+A2+……+A^k,输出矩阵,S矩阵中每个元都要模m。数据范围: n (n ≤ 30) , k (k ≤ 109) ,m (m < 104)输入输入三个正整数n,k,m输出输出矩阵S mod m样例输入2 2 40 11 1样例输出1 ...原创 2019-04-16 13:42:26 · 218 阅读 · 0 评论 -
C++入门小程序:给班级的每个组算平均分并排序
此程序仅供参考当我们在学校时,经常要对每个组的平均分进行排序。于是这个程序便诞生了,主要目的就是算平均分并进行排序。(作为一个C++初级程序,程序员们可以进来学习并进行参考一下。优化的地方可以评论)//此程序还未完工,学号部分未初始化,请谨慎使用#include<iostream>#include<cstdio>#include<cstring>#i...原创 2019-04-09 13:23:54 · 1436 阅读 · 0 评论 -
浅谈欧拉函数及其各种在数学上的用法(欧拉定理,拓展)与其C++上实现的方式
先来简单说下欧拉函数在实际应用上涉及到的各个方面:首先,欧拉函数在同余上面可以派上大用场,涉及了同余的题基本上都能扯到欧拉函数。然后,它在求逆元上也可以说有那么一点关系。。。。。。。欧拉函数的应用远不止于此。所以,欧拉函数在信息竞赛上以及数论上都是一个非常重要的内容,需要整体,系统地学习。笔者在初学的时候也不是很认真,所以写这篇博客的目的其实也是为了复习一遍,巩固一下基础。...原创 2019-04-02 14:07:22 · 1063 阅读 · 0 评论 -
C++矩阵加速经典题目:Warcraft III 守望者的烦恼 [vijos 1067]
Warcraft III 守望者的烦恼背景守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般不查看完所有的监狱,只是从入口进入,然后再从出口出来就算完成任务了。描述头脑并不发达的warden最近在思考一个问题,她的闪烁技能是可以升级的,k级的闪烁技能最...原创 2019-04-11 13:21:58 · 685 阅读 · 1 评论 -
C++信息竞赛NOIP各种必备实用模板(逆元,费马小定理,扩展欧几里得,快速幂,卡常,欧拉函数,组合数。。。。。。)
为什么会有此博客? 此博客是为了博主复习时方便地背模板。博主在代码部分都是默写的,所以可能会有点小错误,见谅。前半部分重点关注于数论。如果觉得很好的朋友可以收藏了慢慢看卡常必备!快速读入int read() { int s=0,f=1;char a=getchar(); while(a<'0' || a>'9') { if(a=='-') f...原创 2019-03-28 12:49:40 · 712 阅读 · 0 评论 -
浅谈矩阵加速——以时间复杂度为O(log n)的算法实现裴波那契数列第n项及前n之和使用矩阵加速法的优化求法
首先请连矩阵乘法乘法都还没有了解的同学简单看一下这篇博客:https://blog.csdn.net/weixin_44049566/article/details/88945949首先直接暴力求使用O(n)的时间复杂度肯定是不行的,所以我们应该使用更优的时间复杂度。设f(n)为裴波那契数列第n项。让我们来构造两个矩阵:和.现在我们不妨将两个矩阵相乘,化简过后可以得到:,...原创 2019-04-01 14:11:02 · 698 阅读 · 2 评论 -
C++数论板题(弹药科技):Lengendre定理和欧拉函数
弹药科技时间限制: 1 Sec 内存限制: 128 MB题目描述经过精灵族全力抵挡,精灵终于坚持到了联络系统的重建,于是精灵向人类求助,大魔法师伊扎洛决定弓}用博士的最新科技来抗敌。 伊扎洛:“博士,还没好吗?” 博士:“只差一步了!只需要在正确的位置装上弹药就可以了!”博士的最新科技是全新的炸弹,但是现在还需要一步装弹药的操作。博士的炸弹有N!个位置可以装弹药(>.<...原创 2019-04-10 13:33:45 · 259 阅读 · 0 评论 -
无穷个2的相幂(2^2^2^2^2^2^2...无穷个^2...^2)%p的结果居然是一个定值!?利用欧拉定理巧妙降幂求出正解 [LYDSY3884]上帝与集合的正确用法
[LYDSY3884]上帝与集合的正确用法时间限制:2 Sec内存限制:128 MB题目描述根据一些书上的记载,上帝的一次失败的创世经历是这样的:第一天, 上帝创造了一个世界的基本元素,称做“元”。第二天, 上帝创造了一个新的元素,称作“α”。“α”被定义为“元”构成的集合。容易发现,一共有两种不同的“α”。第三天, 上帝又创造了一个新的元素,称作“β”。“β...原创 2019-04-05 17:18:31 · 750 阅读 · 0 评论 -
C++TR的数列 : 矩阵加速基础
问题 D(3795): TR的数列(矩阵加速)时间限制:1 Sec内存限制:512 MB题目描述TR非常喜欢数学,经常一个人拿出草稿纸研究奇奇怪怪的数学问题,最近,他突然对数列产生了兴趣,他找到一个数列,类似于斐波拉契,即:Tn=1*f1+2*f2+3*f3+……+n*fn (fn为斐波拉契的第n项值)现在TR想请你帮忙求Tn%m的值输入两个用空格隔开的整数...原创 2019-04-05 16:26:02 · 520 阅读 · 0 评论 -
C++解题报告 : 迭代加深搜索之 ZOJ 1937 Addition Chains
此题不难,主要思路便是IDDFS(迭代加深搜索),关键在于优化。一个IDDFS的简单介绍,没有了解的同学可以看看:https://www.cnblogs.com/MisakaMKT/articles/10767945.html我们可以这么想,设当前规定长度为M,题目要求得出的数为N。在搜索中,当前的步数为step,当前的数列为 数组a。首先来确定思路,便是在以得出的数列a中枚举每两个数...原创 2019-04-25 14:00:05 · 254 阅读 · 0 评论 -
IDA* :[UVa11212]骑士精神
题目此题根据题目可知是迭代加深搜索。首先应该枚举空格的位置,让空格像一个马一样移动。但迭代加深搜索之后时间复杂度还是非常的高,根本过不了题。感觉也想不出什么减枝,于是便要用到了乐观估计函数(Optimistic Estimation Function)以3种颜色的格子来表示原棋盘:如果我们要从一个状态抵达到原棋盘,那么需要的步数绝对是小于当前状态与原棋盘不同的格子的数量、那么我们...原创 2019-04-25 17:28:55 · 172 阅读 · 0 评论 -
C++集合set的用法
众所周知STL是C++中十分实用的容器,set便是其中之一。最近做的题都接触到了set(集合),正好学习了一下,将自己的成果写一写。没有接触过的人也可以看看,表示set非常的好用。(话说最近好久都没有写过博客了)定义首先我们需要一个头文件来使用set#include <set>set的定义类似vector(动态数组):set<int> S1;//定义了一个in...原创 2019-07-10 09:06:54 · 3024 阅读 · 0 评论 -
OI:校内模拟赛 T2:Tavan —— 字符操作,k进制转换
模拟赛的题,内容主要考察的是字符串操作,字典序,和类似于k进制的转换,有兴趣的同学可以来看看。题目真的是又臭又长。#3369. Tavan内存限制:32 MiB时间限制:1000 ms标准输入输出题目类型:传统评测方式:文本比较上传者: cqbzgm题目描述小 Zeljko 一直在阁楼里读他奶奶的旧信,并且发现了一个长度为 N 的单词。 不幸的是,由于溢出的墨水,他不知道单词...原创 2019-07-12 19:05:18 · 345 阅读 · 0 评论 -
C++ [poj 1699] Best Sequence : DFS+字符串处理+减枝
最近在做 关于 搜索 的练习。AC了这道题 就来 写题解了。首先,我们可以 用一个dis的 二维数组 来储存 每一对 字符串 中首尾相同 的 字符串 的个数。(对于测试样例,dis[3][2]=2,而dis[2][3]=0。)(字符串的 预处理 这里 我搞了 一段时间,建议 读者也去 实践一下)。处理出来 dis数组后 剩下的 就很好办了,可以 纯枚举深搜。以每一个 字符串 为起点,将...原创 2019-05-16 17:17:53 · 522 阅读 · 0 评论 -
C++Cleaning Robot (BFS+DFS=AC)
直接上题吧,话说 好久都没写博客了,都在编Scratch。。。首先可以使用BFS来 把每个点’o’和点’*'的最短距离给求出来,顺便便可以求出有没有无解的情况。之后使用dfs,以点’o’为起点搜出最短路径。加一个小剪枝就可以Ac了、#include <cstring>#include <cmath>#include <iostream>#inclu...原创 2019-05-15 14:17:48 · 370 阅读 · 0 评论 -
关于 C++ 中的 各种位运算 的使用方法 以及 实际程序上的 运用
位运算,简单 来说就是在二进制 的基础上 使用 C++规定 的符号进行 的运算。在实际 的程序 中,位运算 往往比加减乘除 要 快得多(计算机的 基础运算 就是二进制,所以在二进制上进行的 位运算 要快)。所以在 算法竞赛中 常常 都被用来优化 时间 复杂度。虽然 已经做了 很多题,算是对 C++ 语言 有了些了解,但位运算 从来都没有 接触过。正好 最近 学到的一个算法 正好需要用到,于是 ...原创 2019-05-14 13:44:59 · 704 阅读 · 0 评论 -
剑指offer:详细推导拓展中国剩余定理(CRTpro)及具体实现C++模板题Strange Way to Express Integers
前言中国剩余定理和拓展中国剩余定理其实没有一点儿关系。尽管他们求解的内容十分相似:中国剩余定理:求的是模数互质的同余方程的解。中国剩余定理pro:求的是同余方程的解。可以看到两者中国剩余定理pro的适用范围更广,所以我推荐使用中国剩余定理pro,中国剩余定理可以了解一下。如果你还不知道下面的知识,请自行百度补习:1.拓展欧几里得算法求解如下不定方程及如何拓展到求此不定方程的...原创 2019-03-27 13:45:17 · 347 阅读 · 0 评论 -
C++剑指offer:树形DP——较简单的树形DP:重建道路
较简单的树形DP问题 M(1288): 【基础算法】重建道路时间限制:1 Sec内存限制:64 MB题目描述一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了Farmer John的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的。因此,牧场运输系统可以被构建成一棵树。John想要知道另一次地震会造成多严重的破...原创 2019-03-13 14:04:11 · 351 阅读 · 0 评论 -
C++单源点最短路之“灌溉农田II”——在图中另外添加一个点解决的单源点最短路问题
前言此题为校内的测试题,所以估计也没有几个人看。。。不过有兴趣的同学可以看看dijkstra的堆优化什么的是吧题目问题 B(3779): 灌溉农田Ⅱ时间限制: 1 Sec 内存限制: 512 MB题目描述 输入数据范围:前4个点n<=300;后6个点n<=100000,m<=200000保证图中没有重边,自环,所有的费用(...原创 2019-02-11 14:00:29 · 558 阅读 · 0 评论 -
C++ 剑指offer:高级数据结构之使用“懒标记”优化线段树的时间复杂度(删除线段 or 线段统计) ——线段树入门模板题详解
目录前言题目正题:懒标记的概念及运用代码部分后记前言此题应该是我学习线段树突破的第一个突破点吧。懒标记相信学过线段树的都已经很熟悉了吧。这篇博客主要是写给刚入门线段树的初学者参考的。懒标记,是优化线段树时间复杂度的一个很重要的技巧。学好懒标记,是熟练掌握并使用线段树的第一个突破点。那么懒标记究竟是什么呢?我们想到懒,就可以想到推迟,延迟,懒标记就运用了这个特性...原创 2019-01-28 22:50:30 · 691 阅读 · 0 评论 -
C++树形DP入门题——Anniversary Party
目录前言题目大意分析代码后记前言发现这个月快完了还没写几篇博客,于是来水水博客hhh这篇博客如果没有树形DP的基础比较难看懂,所以可以先看看这篇博客那么我们就直接切入正题看题面吧。题目大意在一个很强大的公司,有n个职员,每个职员都有唯一一个上司。这些职员在自己那唯一一个上司在时是不会来参加派对的。每个职员有一个开心指数。求来了的职员的最大开心指数。...原创 2019-01-31 23:06:43 · 484 阅读 · 0 评论 -
C++树形DP初级入门题——The Fair Nut and the Best Path
目录前言题目分析代码后记前言许多新人(包括我)在掌握树形DP时都比较困难。此题为树形DP里还算简单的一道题,适合初学者入门。那么,树形DP是什么呢?我们都已经学过了动态规划,也就是DP。树形DP与DP本质上并无区别,它的特点在于DP状态的转移并不是简单的线性上的转移,树形DP状态的转移依赖的是树(图)。题目原题题面上全是废话(还是英文的),所以我直接来解释题...原创 2019-01-31 22:50:57 · 486 阅读 · 0 评论 -
C++剑指offer:高级数据结构之线段树入门详解
目录前言理解操作后记前言早在刚学C++编程之际,就已经听说了线段树的大名今天的我也已经学会线段树了虽然是半懂半懵。不过有趣的是我在学线段树时并没有感觉到太困难,可能是我比较擅长树和递归这一块的知识吧。总之我很快就初步掌握了线段树,虽然只是初步掌握,但还是来写博客了。笔者初学线段树,博客中可能有纰漏,如果有错误的,欢迎指出以供纠正。理解先说说我对线段树的理解吧。相...原创 2019-01-19 14:44:06 · 396 阅读 · 1 评论 -
C++剑指offer:四边形不等式优化动态规划(一)——区间DP 线性的合并石子的优化合并石子的变形【HDU-3506】MonkeyParty的题解
前言DP的平行四边形优化,是一个难点,它非常难懂(关于平行四变形的理论基础及证明,有兴趣的同学可以看看这个大佬的博客,虽然我从来不会无聊到看证明),而且我在上课时并没有听太懂,都是看了别人的题解才看懂的。那么,要怎么才能学会平行四边形等式呢,先看看下面这个理论知识,为我们之后的具体优化提供基础。平行四边形优化是什么在日常的做动态规划的题时,我们经常会遇见以下这个状态转移方程(或类似),...原创 2018-12-31 20:26:33 · 304 阅读 · 0 评论 -
C++剑指offer:解题报告之DP优化学习记 (二) ——浅论DP斜率优化 (Print Article 【HDU - 3507】 )
链接:https://share.weiyun.com/5LzbzAc目录前言斜率优化前期准备1.从状态转移方程出发2.推理状态转移方程对结论的进一步推导干货!综合结论判断斜率大小的方法:叉乘正片开始:代码部分后记前言之前我们对DP优化已经有了很多的了解,比如:单调队列优化DP,四边形优化DP。今天,我们要讲的是传说中的斜率优化。它与四边形优化...原创 2019-01-10 14:04:49 · 451 阅读 · 0 评论 -
C++剑指offer:单调队列入门讲解及个人学习心得与总结 例题:[USACO NOV 2013银组]拥挤的奶牛 and 滑动窗口 ——求一定长度的区间内的最大值和最小值及其变式的单调队列优化
目录前言题解滑动窗口拥挤的奶牛后记前言我相信你是被我优秀的标题吸引,或是想认真地学习一下单调队列的态度进来的。不管怎样,我都不会让你们失望。先来简单介绍一下单调队列:单调队列,从字面意思来看,即单调的队列。单调指的是这个对列的性质,那什么是单调呢?举个例子:一个序列:5 4 3 2 1我们就可以说它是单调递减的,1 2 3 4 5也是一个单调序列,不过它是单调...原创 2018-12-25 13:32:44 · 389 阅读 · 1 评论 -
C++巧妙运用单调数组解题——奶牛慢跑(Cow Jogging)
目录目录前言题面分析代码后记前言此题在测评网站上找不到原题,仅供想学习单调数组的同学们交流使用。对单调队列(单调数组)没有了解的可以看看这篇博客。题面3041: 奶牛慢跑题目描述有n(n<=100000)头奶牛在一个无穷长的小道上慢跑。每头奶牛的起点不同,速度也不同。小道可以被分成多条跑到。奶牛只能在属于自己的跑道上慢跑,不允许更换跑道,...原创 2018-12-24 13:04:42 · 1037 阅读 · 0 评论 -
C++动态规划之背包问题之多重背包求方案数之 : 新年去世(趣事)之打牌 运用递归+数组输出多重背包的路径(用了哪些物品)
此题是一道很简单的多重背包的题。相信只要有点DP基础的同学都可以打出此题的部分解。但此题的重点在于它还要要求输出在到达目标的情况下输出相应的路径。(这种方法是我自己根据以前所学琢磨出来的,可能有点纰漏,见谅。我还没有看过题解,所以知不知道是不是正解)。话说看了看别人的题解,我的这篇博客应该算是比较详细了的吧。原创 2019-01-03 16:02:02 · 1385 阅读 · 0 评论 -
C++剑指offer:[USACO13NOV]POGO的牛Pogo-Cow(弹簧高跷)——通过修改循环的顺序来巧妙地实现对动态规划的优化
前言此题在网上的题解大都解释的比较.......怎么说呢,并不是很容易看懂,所以我觉得还是有必要写一篇比较详细的题解的。此题为一道动态规划的优化题。普遍的做法时间复杂度是,但可以通过修改循环的顺序来巧妙地实现的算法。(此题还有单调队列的做法,具体的做法我还在研究,有空也会发出来)。题目描述洛谷P3089在草场上有一条直线,直线上有若干个目标点。每个目标点都有一个分值和一个坐标。现...原创 2018-12-28 14:11:37 · 365 阅读 · 0 评论 -
C++解题报告:最大矩形面积(Largest Rectangle in Histogram)———单调栈
目录目录题目描述初步探究定义正文代码总结 前言此篇博客是我在CSDN发表的第一篇博客,现在看来文笔比现在差了许多。果然写博客确实提高了我的能力。单调栈是一个非常重要的数据结构,在我们的DP学到后期时,许多题目都需要用他来优化,他常常可以将的算法优化为(甚至更少)。但这里我要讲的不是单调队列优化DP,而是对另一种算法的优化。(如果你想看看单调队列优化DP,你可...原创 2018-12-11 13:20:51 · 3808 阅读 · 4 评论 -
震惊!单调队列优化DP竟如此简单——Monkey(原题:POI2014 Little Bird)
目录前言题目初步分析 正解结尾 前言此题是用单调队列来优化DP的实例,十分适合初学单调队列的人做,并且类似于单调队列优化多重背包,对今后进一步学习DP有很大的作用。(如果你不知道什么是单调队列,看看这篇博客(矩形面积)LGOJ P3572 Little Bird 题目问题 A(3768): 猴子时间限制: 2 Sec 内存限制: 128 MB...原创 2018-12-14 22:13:44 · 618 阅读 · 0 评论 -
C++单源点最短路——dijkstra的堆优化模板(包看包懂)
众所周知,最短路是图论问题里最重要的问题,本文将详细探索最短路算法的dijkstra算法的堆优化。初学者必看的博客。原创 2019-02-11 14:11:26 · 2049 阅读 · 2 评论 -
C++高级算法之树形DP——如何找树的重心(包看包懂)
前言最近在学树形DP,感触颇多。下面就写出来了。题目问题 C(2078): 求树的重心时间限制:1 Sec内存限制:128 MB题目描述树的重心定义为树的某个节点,当去掉该节点后,树的各个连通分量中,节点数最多的连通分量其节点数达到最小值。树可能存在多个重心。如下图,当去掉点1后,树将分成两个连通块:(2,4,5),(3,6,7),则最大的连通块包含节点个数为3。...原创 2019-02-12 17:29:41 · 1446 阅读 · 1 评论 -
剑指offer:C++[JSOI2015] 染色问题 容斥原理及二项式优化
问题 H(3789): 格子染色时间限制:1 Sec内存限制:128 MB题目描述 棋盘是一个n×m的矩形,分成n行m列共n*m个小方格。现在萌萌和南南有C种不同颜色的颜料,他们希望把棋盘用这些颜料染色,并满足以下规定:1. 棋盘的每一个小方格既可以染色(染成C种颜色中的一种) ,也可以不染色。2. 棋盘的每一行至少有一个小方格被染色。3. 棋盘的每一列...原创 2019-03-21 13:28:13 · 1208 阅读 · 0 评论 -
剑指offer:C++树上的动态规划——树形DP之背包 LG[P1270]:访问艺术馆
前言此题难度:高难度偏简单。来说下为什么说这道题“高难度偏简单”。如果只看代码的实现以及DP的思路及转移,其实这道题的难道并不是很高。但是这道题的“坑”很多,输入数据的形式也非常变态,对代码实现能力不高的同学简直就是一场煎熬,而且有几个坑也不容易注意到,让我WA了好几次。此题的本质其实也是多重背包,实现起来十分经典,可供初学者参考。题目问题 L(1286): 【基础算...原创 2019-03-12 15:50:02 · 234 阅读 · 0 评论 -
剑指offer:C++【UVA 1635】无关的元素 排列组合数的应用及唯一分解定理
问题 A(2716): 无关的元素时间限制:1 Sec内存限制:128 MB题目描述对于给定的n个数a1,a2,...,an,依次求出相邻两数之和,将得到一个新数列。重复上述操作,最后结果将变成一个数。问这个数除以m的余数与哪些数无关?例如n=3,m=2时,第一次求和得到a1+a2,a2+a3,再次求和得到a1+2a2+a3,它除以2的余数和a2无关。输入第1行:...原创 2019-03-20 14:15:26 · 211 阅读 · 0 评论 -
剑指offer:C++树形背包——战略游戏
前言详见树形DP入门题:https://blog.csdn.net/weixin_44049566/article/details/86727140代码#include <iostream>#include <cstring>#include <cstdio>#include <vector>using namespace st...原创 2019-03-11 13:51:38 · 294 阅读 · 0 评论