算法
文章平均质量分 77
xizi_ghq
这个作者很懒,什么都没留下…
展开
-
tuple
#include<bits/stdc++.h>using namespace std;int main(){ tuple<size_t,string> p1; tuple<size_t,string> p2{1,"gao"}; p1=make_tuple(1,"gao"); cout<<get<0>(p...原创 2019-11-13 15:21:26 · 121 阅读 · 0 评论 -
P4556 [Vani有约会]雨天的尾巴
本来刚上课,想要学一下线段树合并,一看模板题????树剖。然后打了一半板子,思路断了,,,又回去看了一会,打了树剖,一看表,,,,下课了,,思路如下://树剖//将修改离线分割//线段树//从1 到n更新,到每个点我们知道要删除什么添加什么,然后这个点对应的答案也就出来了。#include<bits/stdc++.h>using namespace std;c...原创 2019-10-29 15:39:34 · 145 阅读 · 0 评论 -
整体二分+洛谷P1527 [国家集训队]矩阵乘法
我靠,tm的,把1写成2,debug了一晚上,debug到心态炸裂。不过,这整体二分,也没有想象中的那么快,可能不好写,但是代码少。代码少,还是很舒服~#include<bits/stdc++.h>using namespace std;const int M=500*505;struct Node{int x,y,v;}d[M];bool cmp(Nod...原创 2019-10-18 10:30:18 · 118 阅读 · 0 评论 -
临阵磨枪
马上区域赛了 ,每天刷一些自己以前写过的题,记录在博客里督促自己,点分治:poj1741,求树上长度在kr区间内的路径个数#include<cstring>#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int M=1e4...原创 2019-10-15 19:31:33 · 168 阅读 · 0 评论 -
扩展kmp 模板
题目描述有两个字符串aa,bb,要求输出bb与aa的每一个后缀的最长公共前缀输入格式两行,分别为两个字符串aa,bb输出格式共两行第一行有lenb个数,为b的next数组(特别地,next_{1}next1为lenb)第二行有lena个数,即答案输入输出样例输入 #1复制aaaabaaaaaaa输出 #1复制5 4 3 2 14 3 2 1...原创 2019-10-15 08:41:04 · 134 阅读 · 0 评论 -
可持久化01字典树 hdu5536
题目大意:在一个数组中找出 (s[i]+s[j])^s[k] 最大的值,其中 i、j、k 各不相同。数据范围太小了 做法见代码:#include<bits/stdc++.h>using namespace std;using ll =long long ;constexpr int M=1005;ll res,tot,t[M*33][2],val[M*33]...原创 2019-10-14 20:17:12 · 138 阅读 · 0 评论 -
异或:01字典树
给你一组数,给你一个数字,求这组数字中和这个数异或和最大的数模板:#include<bits/stdc++.h>using namespace std;#define ll long longconst int M=1e5+5;int n,m,t[M*33][2],tot;ll val[33*M];void inter(ll x){ int rt=0; ...原创 2019-10-12 15:52:11 · 191 阅读 · 1 评论 -
图论-最短路-迪杰斯特拉算法
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口...原创 2018-07-23 17:58:07 · 547 阅读 · 0 评论 -
铁轨(rails,ACM/ICPC CERC 1997,UVa 514)
今天学习算法:发现自己对栈很懵逼,看了一下程序,决定自己手动写一遍加深理解。 有n节车厢从A方向驶入车站,按进站顺序编号1~n。 现让这些火车按照某种特定的顺序进入B方向的铁轨并驶出车站。 为了重组车厢,可以借助中转站C。 C是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出C。 对于每个车厢,一旦从A移入C,就不能再回到A了;一旦从C移入B,就不...原创 2018-07-19 11:42:10 · 249 阅读 · 0 评论 -
入门选手建立二叉树
//建立一个二叉树 才能去吃饭#include<cstdio>#include<iostream>#include<algorithm>#include<queue>const int MAXN=50; using namespace std; class node{ private : char data; node...原创 2018-07-20 16:46:53 · 163 阅读 · 0 评论 -
编写一个程序,实现二叉树的各种运算
来源:https://blog.csdn.net/u012651730/article/details/16830071 (1)输出二叉树b;(2)输出H节点的左右孩子节点值;(3)输出二叉树b的深度;(4)输出二叉树b的宽度;(5)输出二叉树b的节点个数;(6)输出二叉树b的叶子节点#include"iostream"#include"queue"#defi...转载 2018-07-20 19:21:14 · 2522 阅读 · 0 评论 -
Catch That Cow广搜典型例题
Problem Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is...原创 2018-07-21 20:52:46 · 427 阅读 · 0 评论 -
木块问题,紫书UVa101
//输/、入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置。现对这些木块进行操作,操作分为四种。//1、move a onto b:把木块a、b上的木块放回各自的原位,再把a放到b上;//2、move a over b:把a上的木块放回各自的原位,再把a发到含b的堆上;//3、pile a onto b:把b上的木块放回各自的原位,再把a连同a上的木块移到b上;/...原创 2018-07-30 15:08:37 · 263 阅读 · 0 评论 -
数据库DATAbase, ACM/ICPC NEERC 2009, UVa1592 紫书例题
本题题意有点扯,看不懂先大概说一下思路把:设立字符串二维数组和int二维数组,还有一个《string,int》map1和《int,int》map2,,,通过数组转换(输入时给每个字符串左一个标记,辅map1来存储),使字符串数组转换为整数数组,再枚举两列并且扫描,通过map2来判断(重要算法,精巧)#include<cstdio>#include<iostream...原创 2018-08-03 19:58:24 · 419 阅读 · 2 评论 -
集合栈计算机
有一个专门为了集合运算而设计的“集合栈”计算机。该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两者的并集入栈INTERSECT:出栈两个集合,然后把二者的交集入栈ADD:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈 每次操作后,输出栈顶集合的大小(即元素个数)...原创 2018-07-31 16:59:28 · 519 阅读 · 0 评论 -
快速排序入门
一共两种写法:一、 #include<iostream>#include<assert.h>using namespace std;int OnceSort(int *a, int left, int right){ int i = 0; int middle = right; right -= 1; while (left < ...原创 2018-08-05 21:23:31 · 173 阅读 · 0 评论 -
团队队列
有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会被排到长队的队尾。输入每个团队中所有队员的编号,要求支持如下3中指令:ENQUEUE x:编号为x的人进入长队DEQUEUE:长队的队首出队STOP:停止模拟对于每个DEQUEUE指令,输出出队的人的 编号//团队队列 #include...原创 2018-08-01 12:21:03 · 1018 阅读 · 0 评论 -
丑数
求第1500个丑数。丑数是不能被2.3.5之外的其他素数整除的数,把丑数从小到大排起来,然后打印第1500个先写一个典例,我写的,//这是我写的,运行了大概15秒才出来结果,一开始以为由bug//debug了半小时 点了运行去了厕所 回来心都碎了 没有bug 只是算法问题 #include<cstdio>#include<algorithm>#i...原创 2018-08-02 19:10:35 · 136 阅读 · 0 评论 -
unix is 命令(Unix is , UVa 400)紫书
#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#include<queue>#include<string>#include<set>using namespace std;void print(const原创 2018-08-02 20:57:54 · 497 阅读 · 0 评论 -
C++栈实现混合运算(算式为字符串)
功能:使用堆栈来实现简单加减乘除混合运算。代码简洁易懂,注释详细,就直接撸代码。一百行,#include<cstdio>#include<iostream>#include<stack>#include<cstdlib>using namespace std;int tool(char s[]);bool tool1(char ...原创 2018-09-04 09:08:44 · 1820 阅读 · 2 评论 -
计算分子量 郑州大学软件工程卓越班课程设计题目4
题目:计算分子量 纯净物都有一定的组成,可用一个相应的化学式来表示其组成成分。化学式是用元素符号表示物质组成及原子个数的式子。用化学符号表示物质分子的组成的化学式称为分子式,它的含义是:组成该化合物的元素,各元素原子数之比,各元素原子的重量之和。化学式可以表示物质的1个分子,以及组成分子的元素种类和原子数量,如果要表示某物质的几个分子,可以在化学式前加上...原创 2018-09-05 16:30:45 · 434 阅读 · 2 评论 -
P1031 均分纸牌
题目描述有NN堆纸牌,编号分别为 1,2,…,N1,2,…,N。每堆上有若干张,但纸牌总数必为NN的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为11堆上取的纸牌,只能移到编号为22的堆上;在编号为NN的堆上取的纸牌,只能移到编号为N-1N−1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。...原创 2018-09-09 08:41:19 · 229 阅读 · 0 评论 -
P1003 铺地毯
题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 nn 张地毯,编号从 11 到nn。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。输入输出格...原创 2018-09-07 08:22:28 · 365 阅读 · 0 评论 -
P1540 机器翻译
本题考的是考虑曲折情况的能力(注意细读题,特别测试用例的使用方法)先描述一下题干,然后粘贴出AC代码;题目背景小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。题目描述这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,...原创 2018-09-07 15:25:06 · 266 阅读 · 0 评论 -
动态规划练习
这一天zdw说了一个很长的字符串,只包括 ‘y’ , ‘i’ , ‘n’ ,’g’这四个字符。你需要选取尽量多的下标,让这些下标在这个字符串中对应的字符按下标从小到大的顺序组起来是一个”yyyyiiinngggg”这样的字符串。其中’y’,’i’,’n’,’g’这些字符的个数为0也算是合法的。比如”yngg”和”g”都是合法的答案现在cy想知道,最多能选多少下标,令其合法?输入数据:第...原创 2018-10-18 17:33:52 · 115 阅读 · 0 评论 -
加油站问题
#include<iostream>using namespace std;//加油站问题 int main(){ int a[1005],n,k,count; cin>>n>>k; for(int i=0;i<=k;i++) cin>>a[i]; //汽车已经加满油 int i=1,m=n; w...原创 2018-10-18 17:52:34 · 179 阅读 · 0 评论 -
dfs解决部分和问题
问题描述:给出n个数,给出和k,能否选出若干个数,使他们的和为k代码如下#include<stack>#include<vector>#include<cstdio>using namespace std;int sum,a[1000],n,k;bool dfs(int i,int sum){ if(i==1+n)return sum...原创 2018-10-19 21:21:05 · 354 阅读 · 0 评论 -
01背包入门学习(附带视频讲解)
视频请自行腾讯视频 “01背包”,讲的特别好 0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?分析一波,面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。解决办法:声明一个 大小为 m[n][c]...原创 2018-10-22 19:49:49 · 552 阅读 · 0 评论 -
动态规划之小A点菜
题目背景uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种。uim指着墙上的价目表(太低级了没有菜单),说:“随便点”。题目描述不过uim由于买了一些辅(e)辅(ro)书,口袋里只剩MMM元(M≤10000)(M \le 10000)(M≤10000)。餐馆虽低端,但是菜品种类不少,有NNN种(N≤100)(N \le 100)(N≤100)...原创 2018-10-22 22:01:40 · 434 阅读 · 0 评论 -
P1141 01迷宫 题解
这道题我一共写了22遍,最后AC的时候手都在颤抖,,,先说一下思路,洛谷有大佬用并查集,等等各种高端操作。虽然我也用并查集写了,但是效果不是太理想。我的思路是G[ ][ ]存放图,V[ ][ ]并不是存放图状态,V[ ] [ ]存放这是第几个连通图,再用一个数组a[ ] 来存放每个联通图的元素数量,配合经典宽度搜索,得出答案。#include<cstdio>#inclu...原创 2018-10-25 22:25:44 · 259 阅读 · 0 评论 -
多重集组合数
题目: 有n种物品, 第i种物品有a个. 不同种类的物品可以互相区分, 但相同种类的无法区分.从这些物品中取出m个, 有多少种取法? 求出数模M的余数.例如: 有n=3种物品, 每种a={1,2,3}个, 取出m=3个, 取法result=6(0+0+3, 0+1+2, 0+2+1, 1+0+2, 1+1+1, 1+2+0).题目来自挑战程序设计竞赛P68页我是蒟蒻,想了一天,才理...原创 2018-10-23 20:02:58 · 1463 阅读 · 2 评论 -
高精度加、减、乘、除算法实现
在说高精度加减乘除运算之前,我们先搞明白什么是高精度运算?实际上高精度就是说参与运算的数据和运算结果的范围,超出标准数据类型能表示的数据大小范围的运算。这个时候,如果要得到正确的计算结果,显然不能依靠普通方法实现了。而要在普通运算原理的基础上,加以辅助算法来实现超大数据的计算。例如:求两个100位的数据的和,或者计算两个100位的数字乘积。这时就要用到高精度算法了。...原创 2019-10-15 13:01:38 · 142 阅读 · 0 评论 -
tarjan算法讲解
时隔好久回来复习tarjan算法,又看了许多网上的文章,在此再给一篇觉得不错的文章:mengxiang000全网最详细tarjan算法讲解,我不敢说别的。反正其他tarjan算法讲解,我看了半天才看懂。我写的这个,读完一遍,发现原来tarjan这么简单!tarjan算法,一个关于 图的联通性的神奇算法。基于DFS(迪法师)算法,深度优先搜索一张有向图。!注意!是有向图。根据树,堆栈,打标记...转载 2018-11-27 20:08:12 · 99 阅读 · 0 评论 -
十大排序模板
#include<bits/stdc++.h>using namespace std;void insertsort(int a[],int n){//插入 int j; for(int i=2;i<=n;i++){ if(a[i]<a[i-1]){ a[0]=a[i]; for(j=i-1;a[j]>a[0];j--) a[j+1]...原创 2018-12-30 10:22:53 · 156 阅读 · 0 评论 -
KMP算法的next和nextval数组解析
next的代码:void rnext(string s){ next[0]=-1; for(int i=1;i<s.size();i++){ int t=i-1;//next[i]存储i之前的最大相同的前缀后缀长度 while(1){ if(!t)break; bool flag = true; for(int v=0;v<t;v++){ ...原创 2019-01-01 11:41:05 · 447 阅读 · 0 评论 -
几种排序在最坏和最好情况下的时间复杂度
原创 2019-01-01 13:46:01 · 5576 阅读 · 0 评论 -
定义在N个元素上的集合A上的等价关系一共有多少种
在一个集合定义一个等价关系相当于把这个集合划分成许多子集的集.(这里假如不懂请追问)于是求等价关系的数目,就是求划分的数目.这其实是个定理,这个数叫Bell数.Bell数没有通项公式,但我们有一个递推公式:B(n+1)=C(0,n)B(0)+C(1,n)B(1)+...+C(n,n)B(n),C(k,n)就是在n个数里选k的数的选法个数.这个很好证明:取第n+1个数,并考虑除了含有它的那...原创 2019-01-08 08:56:53 · 14465 阅读 · 1 评论 -
最长公共子序列
最长公共子序列问题,具有最优子结构性质 设序列Xm={x1,x2,…,xm}和Yn={y1,y2,…,yn}的最长公共子序列为Zk={z1, z2,…, zk} ,则 l 若xm=yn 则 zk=xm=yn 且 Zk-1是Xm-1和 Yn-1的最长公共子序列。 l 若xm≠yn 且 zk≠xm 则 Z是Xm-1和 Y 的最长公共子序列l 若xm≠yn 且 ...原创 2019-01-24 20:44:22 · 231 阅读 · 0 评论 -
牛客训练(处女座与复读机)dp解法
大佬的思想:https://blog.csdn.net/snayf/article/details/86632559题目描述一天,处女座在牛客算法群里发了一句“我好强啊”,引起无数的复读,可是处女座发现复读之后变成了“处女座好强啊”。处女座经过调查发现群里的复读机都是失真的复读机,会固定的产生两个错误。一个错误可以是下面的形式之一:1. 将任意一个小写字母替换成另外一个小写字...原创 2019-01-24 21:13:50 · 275 阅读 · 0 评论 -
威佐夫博弈
首先威佐夫博弈的内容是:有两堆石子,两个顶尖聪明的人在玩游戏,每次每个人可以从任意一堆石子中取任意多的石子或者从两堆石子中取同样多的石子,不能取得人输,分析谁会获得胜利。第k个必败态 (a,a+k):a = (1+sqrt(5))/2*k,怎么判断当前是不是必败态呢,做差求出k然后判断就行了(这个定理证明需要beatty定理什么的,本科生搞不动,所以找规律) 利用坐标图:先标出(0...原创 2019-01-25 21:06:51 · 157 阅读 · 0 评论