- 博客(44)
- 资源 (1)
- 收藏
- 关注
转载 Codeforces Round#321 (div.2) A,B,C,D;(细节处理,尺取,dfs(树上的),状态压缩dp)
附上大神链接:http://www.cnblogs.com/alihenaixiao/p/4836471.html#3276283 自己写的A,C,借鉴的大神的B,D;这个我的头文件习惯了写将近40行,所以就写这了,下面就不写了啊;#include#include#include#include#include#include#include#incl
2017-08-08 21:48:53
369
原创 基数排序
题目大意:就排个序;基本思路:就学习一种新的排序,叫基数排序,然后这个其实就打破了常规的排序最快是n*logn的时间复杂度,我记得我以前读过一点,之所以这样好像是因为排序规则的选取,常规排序的排序规则应该就是直接比较两个数的大小吧(我觉得,有待考察),果然,这就是敢于打破规则的人的牛逼之处吧,太强啦;代码如下(最下面是自己随手打的三组数据):#include#include
2017-08-07 13:40:00
246
原创 求树的最大独立集
题目大意:就是输入一棵树,求出最大独立集的节点数目,然后至于怎么输入的话,先输入一个n,代表节点数目,然后输入n-1条边;基本思路:很显然,树形dp的话是最佳选择了吧,然后状态转移方程就是d(i) = max ( 1+Σd(j) , Σd(k) ) ( j∈gs(i) , i∈s(i) ),然后一切就简单了;代码如下:#include #include #inclu
2017-08-06 13:49:40
441
转载 poj 1655 求树的重心(质心)
先附上链接(吃水不忘挖井人):http://blog.csdn.net/acdreamers/article/details/16905653题目大意:求无根树的重心(质心):对于一棵有n个节点的无根树,找到一个点,使得把树变成以该结点为根的有根树时,最大子树的结点数最小,这个点就是该无根树的节点;题目就是让你求删掉节点的idex,以及最大子树的节点个数,然后如果最大子树的节点个数相同
2017-08-03 14:20:49
483
原创 uva 340
题目大意:参见题干以及刘汝佳紫书;基本思路:模拟,主要是正确理解题意,所谓在两个序列里都出现过的情况就是不管数字本身相不相同,只要在原始序列里和当前输入的猜测序列里都出现过(显然,个数就是min(ori,ans)了),然后这个res剪掉A就是B了;代码如下:#include#include#include#include#include#include#
2017-08-01 10:43:05
222
转载 对于KMP算法的一点点理解(仅仅就是一点点)
先奉上链接:http://www.cnblogs.com/c-cloud/p/3224788.htmlKMP算法的作用:求某一字符串中是否包含某一给定字符串;举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?这个算法反正网上说很难理解,我觉得还好吧,总之别下意识的告诉自己这个东西很难,我一直觉得这
2017-07-12 15:22:41
312
原创 hdu 1285
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 500+10;
2017-06-29 09:04:28
204
转载 凸多边形最优三角剖分
转载:http://www.cnblogs.com/Jason-Damon/p/3298172.html题目描述:用多边形顶点的逆时针序列表示凸多边形,即P={v0,v1,…,vn-1}表示具有n条边的凸多边形。 给定凸多边形P,以及定义在由多边形的边和弦组成的三角形上的权函数w。要求确定该凸多边形的三角剖分,使得即该三角剖分中诸三角形上权之和为最小。解题思
2017-06-28 15:32:27
414
转载 最优矩阵链乘
附链接:http://blog.csdn.net/zhaochengyuan/article/details/7863542题目大意:一个n*m矩阵由n行m列共n*m个数排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵,运算量为nmp。矩阵乘法满足结合律,A*B*C可以表示成(A*B)*C或者是A*(B*C),两者的
2017-06-27 16:03:43
659
原创 codeforce 871D Imbalanced Array
题目大意:然后就i是输入一个整数n,然后输入n个整数,然后求这个区间的子区间的最大值最小值的差值的和;基本思路:转化为用单调栈求每一个值作为最大值和最小值能管到的区间范围,然后求每一个以该值为最大值的区间的个数然后乘以这个最大值加到res上,在求出以该值为最小值的区间个数乘以这个值,然后res减去这个值,最终就等效于求出了所有子区间最大值与最小值的差值的和;代码如下:#incl
2017-06-26 21:59:53
309
原创 poj 3250
题目大意:输入n,表示有n头牛,然后每头牛只能看到他右边比他矮的牛的头发(一样高也不行,因为这个wa了一发),一旦有牛比他高或者和他一样高,此后的牛的头发他就看不见了,求每头牛能看到的其他牛的头发的总和;基本思路:单调栈;代码如下:#include#include#include#include#include#include#include#i
2017-06-26 21:58:22
294
原创 poj 2796
题目大意:输入n,表示有n头牛,然后每头牛只能看到他右边比他矮的牛的头发(一样高也不行,因为这个wa了一发),一旦有牛比他高或者和他一样高,此后的牛的头发他就看不见了,求每头牛能看到的其他牛的头发的总和;基本思路:单调栈;代码如下:#include#include#include#include#include#include#include#inc
2017-06-26 21:40:42
262
原创 51nod 1102
题目大意:有一个正整数的数组,化为直方图,求此直方图包含的最大矩形面积。例如 2,1,5,6,2,3,对应的直方图如下:面积最大的矩形为5,6组成的宽度为2的矩形,面积为10。Input第1行:1个数N,表示数组的长度(0 <= N <= 50000)第2 - N + 1行:数组元素A[i]。(1 Outpu
2017-06-26 21:24:03
195
原创 单调栈
含义:所谓单调栈,顾名思义,首先是栈,然后内部元素是单调的,递增或递减的;作用:一般来说,单调栈能解决的题目时间复杂的如果是朴素的计算的话,就是n^2,然后单调栈的作用就是降低到n。解析:至于为什么能把时间复杂度降低呢,一般来说,单调栈能解决的问题都是可以通过转化为区间最值问题,在找某个值作为最大最小值的区间,然后由于大于小于大于等于小于等于都是具有传递性的,所以时间复杂度就降低为
2017-06-26 21:04:25
350
原创 拓扑排序
题目大意:拓扑排序的dfs实现,核心思想就是递归了,注意倒着存储,然后问题解决;基本思路:递归,然后状态的划分,包括正在访问,访问,访问完毕的点;核心代码:#include#include#include#include#include#include#include#include#include#include#include#i
2017-06-15 09:07:32
252
原创 poj 3311
题目大意:输入一个整数n,代表除送餐开始地(0)以外必须要送达的n个地方,然后下面n+1行,然后第i行第j个数表示从i到j要花的时间,然后问题是到达所有送餐地并回到初始位置的最短时间,到达某个餐馆次序不一定;基本思路:从某一个地点到另一个地点,然后有许多种情况,只能挨个枚举,然后当前所有到达的地点形成一个状态s,然后dp【s】【i】就是当前状态为s,当前到达地点为i的最短时间;然后就是
2017-06-14 23:02:05
279
原创 poj 3254
题目大意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多少种放法。基本思路:首先得一行一行的来,然后这里如果每次都挨个试每种状态的话绝对超时,然后就是把所以满足两两不相邻的情况找出来存起来,每次每一行拿这个去判断,这样 每一行内相邻的情况找出来的,下面的dp就是找满足都放在肥沃土壤和相邻行没有相邻的情况,这样问题就得
2017-06-14 10:47:59
216
原创 uva 401
题目大意:输入一个字符串,让你判断他是不是回文串和镜像串,由它是不是镜像串和回文串决定不同的输出;基本思路:设置一个常量数组,然后判断就好了,简单注意一下那个回文串用for循环 那个判断条件的位置就好了;代码如下:#includeusing namespace std;//char xx[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234
2017-06-13 20:49:22
212
原创 uva 10082
题目大意:见紫书或题干;基本思路:用常量数组存起来每一个字符,然后查找并输出它前面那一个;代码如下:#includeusing namespace std;char s[]="`1234567890-=QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,./";int main(){ char c; while((c=get
2017-06-13 20:01:55
244
原创 hdu 1787 欧拉函数算法
题目大意:输入一个整数n,让你求出0~n之间(不包括0和n)和n的公约数大于1(即不互素)的数的个数;基本思路:欧拉函数求出互素的数的个数,然后总共n-1个数减去互素的个数,得到答案;补充:欧拉函数:给定正整数n,根据唯一分解定理,然后就会有n的素因数分解式n=p1^a1*p2^a2*...*pk^ak为n的素因子分解式,令Ai={x|0那么(欧拉函数这个符号我
2017-06-13 09:43:59
387
原创 uva 272
题目大意:就是输入一长串,再输出一长串,其中某些特殊符号需要变一下,具体是啥,自己去题目网址去看;基本思路:输入是个问题,这里用getchar读一个出一个,然后也可以用fgets个gets,下面我都写一遍;还有个问题就是这个符号并不在ascii码表里,所以就用字符串输出,我也不知道为啥用字符串就能输出,反正以后遇到类似的用字符串试一下就好了;代码如下:getchar:get
2017-06-12 23:01:57
312
原创 竖式问题
基本思路:注意strchr和sprintf的用法;代码如下:#includeusing namespace std;int main(){ char s[100]; char buff[100]; int cnt=0; scanf("%s",s); int x,y,z; for(int i=111;
2017-06-12 20:50:22
566
原创 蛇形填数
基本思路:先存好,再输出;代码如下:#includeusing namespace std;int main(){ int n;cin>>n; int num=1,x=1,y=n,ans[100][100]; memset(ans,0,sizeof(ans)); ans[x][y]=num; while(
2017-06-12 19:51:31
126
原创 分数化小数
今天开始重新刷紫书,算是对自己的一个交代,总觉得这样心里会很踏实,也没啥,或者不就求个踏实吗,so,开始了,先来个最简单的模拟,分数化小数,想来我还是有成长的,一年前写这个题还不会写呢,哈哈,话不多说,开始吧;题目大意:输入三个int型整数a,b,c,然后让你求出a/b的保留c为小数形式;基本思路:这里有一个特殊写法,可以学一下,在不超过16位的时候还是可行的,然后超过了,就模拟手
2017-06-11 23:44:09
824
1
原创 Codeforces Round #418 (Div. 2)
A. An abandoned sentiment from past题目大意:输入n和m,表示有n个数的一个序列,有m个空缺,然后第二行输入n个数,第三行输入m个数,这n个数中,0表示空缺项,然后空缺的项从m个数的序列中选,最后填满这n个数的序列,并且要保证这个序列不是
2017-06-09 11:39:18
247
原创 codeforce : Educational Codeforces Round 22
A. The Contest题目大意:输入一个整数n表示有n个数,然后输入n个数表示这小子解决每个题所用的时间,当然同一时间只能想一个问题,然后他得交题,然后输入m,然后输入m个有序对,表示m个时间段,每个用(l,r)表示,然后只能在l基本思路:很自然想到把所有时间都加起来,然后交了一发,我就是个傻子,反应了一会才想起来可能不在某个时间段内,然后改,不停的错在样例7,11上,简直了
2017-06-09 09:03:59
313
转载 hdu 1426
题目大意:数独游戏,往里面填1~9的数字,使每行每类和该单元格所在小3*3区域里包含1~9每个数,输出填法;基本思路:dfs,然后就是用一个pos数组保存‘?‘的行和列,然后直接红r和c数组来表示某一行和某一列是否出现过某个数,然后这样就能在O(1)时间内判断某行某列是否成立,然后一开始不知道怎么做主要还是因为想用二重循环,但是不太会写,也不知道写出来对不对,然后就不敢写,有空一定顾上
2017-06-07 06:36:04
318
转载 poj 1426
题目描述:输入一个整数n,然后让你求出任意一个n的倍数,要求这个数字的各位数字都必须是0或者1,并输出;基本思路:这个大你不可能暴力枚举吧,一定会超时,然后如果不是让放在搜索里我也不知道要用搜索,然后就算我知道了要用搜索,一开始我还是不知道我该怎么写,所以,比较来比较了去,还是发现下面这个解法最稳,以后遇到类似的题目不妨考虑一下转化为搜索问题去解决,然后至于这么大一个数,自然而然想到取
2017-06-06 18:22:04
196
原创 hdu 1016
题目大意:输入一个数n,然后在一个有n个节点的圆环上放1~n这n个数,求满足相邻两个数相加是素数的情况,并输出;样例:68样例输出:Case 1:1 4 3 2 5 61 6 5 2 3 4Case 2:1 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2(注意格式,两组之间有一个空
2017-06-05 20:40:33
137
原创 poj 3253
题目大意:见白书基本思路:每次肯定选最小的两个,相加,然后这就是哈夫曼编码;代码如下:#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long lo
2017-06-05 18:29:51
172
转载 hdu 4004
转自:http://blog.csdn.net/non_cease/article/details/6769814题目大意:见题目描述;基本思路:二分跳的距离;然后从头扫到尾,n*logn的时间复杂度;(注意,细节处理十分重要可以视为一种技巧题目描述:#include#include#include#include#include#include
2017-06-04 17:05:18
319
原创 hdu 1597
题目大意:题干;基本思路:二分,等差数列;代码如下:#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long int ll;
2017-06-04 13:53:16
257
原创 hdu 2141
题目思路:见题目描述;基本思路:降低时间复杂度;想将两个数组相加时间复杂度为n^2,然后排序logn,然后找n*logn,总的是n^2;代码如下:#include#include#include#include#include#include#include#include#include#include#includeusi
2017-06-04 12:37:40
147
原创 stl lower_bound,upper_bound的实现;
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;int bsearch(int* ans,int left,int right,int value)//仅仅查找是否存在某值等于已知值,
2017-06-04 11:30:57
213
原创 poj 1852
题目大意:n只蚂蚁在l长的杆子上爬,各个蚂蚁方向不一样,碰头后会调转方向继续爬,每秒钟一个长度,然后问所有蚂蚁爬下杆子的最长和最短时间;基本思路:两只蚂蚁碰头后各自调转方向相当于彼此穿过,所以情况就转化的更简单了;首先各个蚂蚁的方向是不知道的,然后用二分找长度中间值,因为所有蚂蚁都掉下杆子的最小时间情况就取决与这两只蚂蚁,让他们的相对位置在左边的方向向左,右边的方向向右,最长时间情况取
2017-06-03 22:07:33
317
原创 最短路(floyd+bellman+dijkstra+dijkstra优先队列优化+spfa)
最短路种类 时间复杂度作用 局限性floyd-Warshell O(n^3) 求多源最短路 ,能解决负权边,有向无向图皆可; 时间复杂度太大,不能解决负权环情况;bellman-ford O(V*E) 求单源最短路,能解决负权边,能解决负权回路并能输出,有向无向图皆可;没有很明显的局限性;spfa 最坏O(V*E),一般很快求单源最短路,能解决负
2017-05-17 20:26:08
280
原创 poj1860 spfa
题目大意:输入n,m,s,v分别表示货币种类数量,货币交换所的数量,某人所拥有的货币编号以及该货币该人拥有的单位数量,每个交换所只能在两种货币之间相互兑换,输入m个交换所的情况,每一行用a,b,r,c,r1,c1,分别表示a到b的汇率和手续费以及b到a的货币和手续费,例如从a兑换到b:value b = (value a-c)*r;问你是否可以通过交换是的最后再换到该人最开始拥有的货币种类时,
2017-05-17 08:53:27
390
转载 C. Naming Company 贪心
转自:http://blog.csdn.net/ever_glow/article/details/71917393题目大意:有两个人,各自有一个字母集合,每个集合里的字母允许重复,而且两个人集合里的字母个数相同,现在他们要给一个公司取名字,名字的长度就是名字中字母的个数,保证名字长度和他们所有拥有的集合里的字母个数相同,他们轮流选一个字母放到名字字符串中的一个位置,而且一旦某个人从他的字
2017-05-14 18:40:50
338
原创 C. Naming Company 几何
题目大意:一个胡萝卜是个等腰三角形,底边长是1,高是h,要切成n段,每一刀切的时候平行底边((2 ≤ n ≤ 1000, 1 ≤ h ≤ 105),分给n个兔子,每个兔子一段,每一段面积相等,让你分别求出n-1刀切得位置距离顶部的距离,并输出;如图所示:基本思路:设第i次切距离顶部距离为h(i),设s为切前i次的上面等腰三角形的面积,那么s=h(i)*h(i)/(h*n);(根据相
2017-05-14 14:38:24
350
原创 poj 1328 贪心 转化
题目大意:如图所示,x轴表示海岸线,x轴上方表示大海,下方表示陆地,有n(1基本思路:一开始是想让岛屿尽量落在雷达能测量的圆的边界上,尽量让雷达位置靠右,后来发现有些情况是无法满足的(至于什么情况请自行思考),根据第一个岛屿放雷达位置很明显要受到后边岛屿位置的影响,不仅仅是它后面那一个岛屿,所以这样做是不可行的,所以我的做法先排序,然后是把每一个岛屿可以在x轴上放雷达监
2017-05-13 22:48:31
328
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人