自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

林伏案的博客

伏案的学习笔记

  • 博客(267)
  • 收藏
  • 关注

原创 codeforces round#420

a题:time limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOkabe needs to renovate the Future Gadget Laboratory after he tri

2017-06-26 16:45:25 496

原创 leetcode--1. Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the sam

2017-06-21 16:46:49 344

原创 leetcode--7. Reverse Integer

Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321click to show spoilers.Note:The input is assumed to be a 32-bit signed integer. Your function

2017-06-21 15:49:33 377

原创 leetcode--4. Median of Two Sorted Arrays

There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).Example 1:nums1 = [1,

2017-06-20 20:40:13 310

原创 leetcode--3. Longest Substring Without Repeating Characters

尺取法首先设置头尾两个指针,都指向头,然后尾指针开始遍历,在遍历过程中记录每个字母出现个数,每次遍历若当前字母没有出现过,则更新答案长度。若出现过,则将头指针移到重复字母的后面一位。然后继续重复上述操作。最后返回答案即可。class Solution {public: int lengthOfLongestSubstring(string s) { if(s.le

2017-06-19 20:41:49 311

原创 横向打印二叉树

问题描述二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。当遇到空子树时,则把该节点放入那个位置。比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白。...|-1210-|...|-8-|.......|...|-7.......|-5-

2017-05-21 17:44:49 823

原创 翻硬币

#include #include #include using namespace std;const int maxn = 1000 +5;char str1[maxn], str2[maxn];inline void flip(char *s, int p){ if(s[p] == '*') s[p] = 'o'; else s[p] = '*';}int

2017-05-19 22:03:57 399

原创 连号区间(*)

/*感觉有点不科学,50000的数据量,n^2竟然能过,不可思议。。。*/#include #include #include using namespace std;const int maxn = 50000 + 5;const int INF = 0x3f3f3f3f;int n;int a[maxn];int main(){ //freopen("in.tx

2017-05-19 21:45:54 328

原创 九宫重排(BFS)

#include #include #include #include using namespace std;struct Node { string code; int d; Node(const string& c, int d): code(c), d(d) {} Node() {}};string bState, eState;string moveSqu

2017-05-19 20:56:11 1221

原创 地宫取宝(dp)

/*solution: dp 设dp[i][j][x][y]:=走到i,j处,手中有x件宝物,且最近拿的一件宝物的价值为y的方案数note: 宝物价值可能为0,所以要加上1.*/#include #include #include using namespace std;const int maxn = 55;const int M = 10000000

2017-05-19 17:15:25 300

原创 小朋友排队

/*solution: 数状数组求出逆序数。 这道题首先要求的就是逆序数对,根据这个数在所有逆序数对中出现的个数就可以算出来不高兴值。*/#include #include #include #include #include using namespace std;const int maxn = 1000000 + 5;typedef long long ll;

2017-05-18 22:24:26 287

原创 回文数字(dfs)

/*水题不表,dfs即可 */#include #include #include using namespace std;int n;vector ans;bool flag;void dfs5(int k, int sum){ if(k == 2) { if(n - sum * 2 = 0) { ans.push_back(n - sum * 2);

2017-04-17 22:25:18 339

原创 poj1236(*强连通分量,缩点)

/*translation: n个学校组成一个网络,给出链接情况(单向图)。求要使得报文能够发往全部学校,最少需要发送多少个报文。 要使得从任何一个学校能够到达任何一个学校,最少需要添加几条边?solution: 强联通分量,缩点 缩点后整张图就成了DAG,那么显然地第一个问题就是DAG上入度为0的点。主要在于第二个问题。如何添边才能得到最优解呢? 方法如下:首先缩点后,可以得到一个

2017-04-04 00:14:15 365

原创 hdu1160(dp的lis模型)

/*translation: 给定一组老鼠的体重和速度,求出这样的一组老鼠数列,使得老鼠的体重在增加,速度在减少。solution: dp,lis 首先按照重量对老鼠进行排序,然后按照普通lis做法即可。note: 1.题目题意有问题,说是求sebsequence,但是按照子序列的定义来看,求出来的根本不是子序列。比如样例第9个数据组 竟然在第7个数据组之前!!而子序列的要求是

2017-04-02 09:59:13 421

原创 poj3180(连通分量)

/*translation: 有若干头奶牛,有若干条绳子连接他们,若干头牛可以组成一个小组,条件是组内的奶牛个数大于等于2,且组内任意两头奶牛之间的绳子都可以 相互连接。(注意绳子是单向的)。问共可以组成多少组?solution: 其实就是求有多少个连通分量且联通分量内的点数大于2*/#include #include #include #include using nam

2017-03-29 10:33:35 544

原创 poj2186(*连通分量)

/*translation: 给定若干头牛和每头牛之间的关系,若牛A认为牛B受欢迎,牛B认为牛C受欢迎。则牛A认为牛C受欢迎。求牛群中总共有多少头 牛收到所有牛的欢迎。solution: 首先求强联通分量,求完之后可以将其缩点后的图看成一个有向无环图。根据强联通分量的性质,所求的答案肯定是一个强联通分量 中点的个数。那么这个强联通分量必定是缩点后有向无环图中出度为0的那个点(分量)。

2017-03-28 22:05:22 366

原创 hdu1069(*记忆化搜索)

/*translation: 给出n种类型的箱子,每种箱子数量可以无限供应。当一个箱子的底面长宽严格比另一个箱子要小时才可以重叠在上面。 问最高可以叠多高?solution: 记忆化搜索即可*/#include #include #include #include using namespace std;const int maxn = 100;st

2017-03-23 21:27:24 284

原创 la3716(*数学变形)

/*translation: 给出两条字符串A,B。找出一段最长的子区间,使得区间所有位置x,有不超过p%的位置存在A[x]!=B[x]solution: 利用数学变形 构造一个数列,两字符串相等的位置为0,不等的为1。另sum[i]为前缀和。则就是求 (sum[e]-sum[s])/(e-s)不超过p%的最长长度是多少?note: * 看上去跟LA4

2017-03-21 21:59:09 479

原创 la4276(*数形结合,单调队列求点集斜率极值)

/*translation: 给定一个01数列,选择一个长度至少为L的字串,使得子序列中数字的平均值最大。输出这个子序列的起点和终点 位置solution: 详见论文"浅谈数型结合思想在信息学竞赛中的应用"*/#include #include #include using namespace std;const int maxn = 100000 + 5

2017-03-20 22:27:36 293

原创 uva10827(*前缀和,降维)

/*translation: 给出一个矩阵,要求求出一个子矩阵,问这个子矩阵最大的和是多少?solution: 降维,前缀和note: * 将原来的矩阵复制成4份后再组合成一个大矩阵就方便处理了。然后枚举矩阵的范围,复杂度为75*75*75*75 枚举出来后,求出每一列上下界之间的和(利用前缀和可以常数时间内求出)。降维成1维后就是求最大子序列的

2017-03-20 22:26:04 372

原创 usaco2.1.4

/*ID:lvfuan11PROG:holsteinLANG:C++translation: 给出每头牛需要的维生素,现在有若干种饲料,每种各含有若干量的各种维生素,问最少用多少种饲料可以满足一头牛的每日所需solution: 直接枚举即可,可以利用二进制枚举来加速。*/#include #include #include #include using namespa

2017-03-15 22:21:01 217

原创 usaco2.1.5

/*ID:lvfuan11PROG:hammingLANG:C++translation: 给出n,b,d求出n个字典序最小的n个长度为b的01字符串,这些字符串两两满足其hamming距离大于等于d。solution: 直接枚举即可,可以使用二进制来加速*/#include #include #include using namespace std;int n,

2017-03-15 22:20:23 275

原创 usaco2.1.4-----Healthy Holsteins(二进制枚举)

/*ID:lvfuan11PROG:holsteinLANG:C++translation: 给出每头牛需要的维生素,现在有若干种饲料,每种各含有若干量的各种维生素,问最少用多少种饲料可以满足一头牛的每日所需solution: 直接枚举即可,可以利用二进制枚举来加速。*/#include #include #include #include using namespa

2017-03-15 08:35:52 274

原创 usaco2.1.3-----Sorting a Three-Valued Sequence(*三值交换排序)

/*ID:lvfuan11PROG:sort3LANG:C++translation: 有1,2,3三个数字组成的数列,现在要将其变成有序数列,求最少要交换多少次。solution: 首先定义两个数字如果交换后都在正确的位置上,那么称这两个数字为交叉相等。所以根据贪心的思路很容易想到交叉相等的 数字肯定要交换。这样将所有交叉相等的数字处理完后就完成了算法的第一步。 那么如何处理

2017-03-14 21:40:34 454

原创 usaco2.1.2-----orderd fractions(欧几里的)

/*ID:lvfuan11PROG:frac1LANG:C++*/#include #include #include #include using namespace std;struct Frac{ double val; int up, down; Frac(int u, int d):up(u), down(d) {val = (double)up / (d

2017-03-13 09:28:26 260

原创 usaco2.1.1-----the castle(flood fill模型)

/*ID:lvfuan11PROG:castleLANG:C++translation: 见usanocowsolution: flood fill的经典模型。dfs即可。注意题目要求选择最靠西边的墙,意味着同一个各自内,该格的北墙的优先级是比西墙高的! 因为北墙更靠近西边。*/#include #include #include using namespace std

2017-03-13 08:53:36 263

原创 la2678(前缀和,二分/尺取法)

/*translation: 有n个正整数组成一个序列。给定整数s,求长度最短的连续序列,使得他们的和大于等于ssolution: 前缀和,尺取法/二分 这道题可用尺取法或者二分法。 无论是尺取还是二分,都要求出前缀和。用二分法时,枚举起点,然后二分查找满足条件的 终点,同时更新维护答案即可。(根据前缀和的单调性) 如果用尺取法的话,就是最简单的

2017-03-11 15:09:49 658

原创 uva11464(递推关系)

/*translation: 给出一个矩阵,每个数字要么0要么是1。可以将若干个0变换成1,问最少需要多少个这样的变换才能使得矩阵变成 偶数矩阵。一个偶数矩阵里面每一个数字的上下左右数字加起来的和都是偶数。solution: 递推 关键是找到递推关系。因为一行最多只要15个数字,所以可以暴力枚举出第一行的状态。然后根据第一行的状态其实就可以确定下一行 的状态了。进而就可以推出整个矩阵

2017-03-10 22:29:31 360

原创 la3602(贪心)

/*translation: 给出若干条由A,G,C,T组成的字符串。现在求一个字符串,使得它到每个给出的字符串的hamming距离最小 haming距离定义为两个字符串不同字符的个数。solution: 贪心 很明显,对于要求字符串的i位置上的字符来说,该字符必定在其它字符串上出现的字符最多。明白这一点也就没有难度了。*/#include #include #include

2017-03-10 21:21:04 227

原创 201604-4(游戏)

/*ccf 201604_4 普通的bfs,但是注意当无路可走的时候是可以回到上一次走过的格子的,所以不能用普通的 标记像vis[i][j]来表示某个格子曾走过。应该采用拆点的思想,vis[i][j][t]表示t时刻走过 格子i,j。其余按照套路走即可。*/#include #include #include #include using names

2017-03-07 17:30:06 302

原创 aoj1313(*simpson公式求三维体积)

/*translation: 三维坐标系上有2个棱柱,分别平行与Z轴以及Y轴,现在分别给出它们在XY平面和XZ平面上的底面顶点,求两个棱柱相交部分的体积。solution: 主要思路是不难,但前提得知道simpson公式。利用该公式即可将积分公式化为普通的公式。然后微积分求出来的既是体积。*/#include #include #include #include using

2017-03-01 21:57:40 786

原创 poj1912(*判断直线是否穿过凸多边形)

/*translation: 给定一些点,再给出若干条直线,对于每一条直线,判断其所有点是否都在同一侧solution: 很容易想到先求凸包,然后再对凸包上面的点做处理。note: * 很明显,只要直线不经过凸包即可。但是怎么快速判断就成了问题。方法是根据凸包上面的点进行二分查找第一个在右侧或者左侧的点。 因为凸包上的点的斜率呈现单调性,故可行。然后对两个点判断是否都在直线同一侧

2017-03-01 20:18:53 2111

原创 poj3293(几何扫描线+并查集)

/*translation: 给定N个点,问是否能组成直角多边形(每个顶点都与另外两个顶点构成直角,每条边都平行于坐标轴),并求出周长solution: 扫描线,并查集 横着扫描一遍,并将总坐标相同的相邻两个连起来,如果到最后剩下一个单独的点,那么答案肯定就为-1.竖直方向一样。 注意最后还要判断是否联通(考虑用并查集)以及横线和竖线是否有相交。*/#include #inclu

2017-02-28 22:35:13 400

原创 poj3246(*凸包)

/*translation:给出n个点,求去掉一点后,再求凸包,所能得到凸包最小的面积是多少?solution:很容易想到去掉的点肯定在凸包上面。所以对上面的点一一枚举,然后维护最小答案即可。note:* 想半天只想到去掉的点肯定在凸包上,然后暴力枚举上面的每一个点。但看了下数据范围又否决了自己的方法。 但是万万没想到题解就是按照暴力来写的,这数据明显偏弱了。不然如此暴

2017-02-28 20:46:50 319

原创 poj3608(旋转卡壳求两凸包间的最短距离)

/*translation: 求两个凸包间的最小距离?solution: 旋转卡壳法。note: * 网上给出的资料都差不多,具体如下: 1. 计算凸包P在y轴方向上的最小值记为yminP,和凸包Q在y轴方向上的最大值记为ymaxQ。 2. 建立两条紧贴着yminP, ymaxQ的两条水平的直线LP, LQ。要求他们指向不同的方向。这时候他们就形成了一对anti-podal pai

2017-02-27 22:34:50 536

原创 poj1113(凸包)

/*translation: 用一条线把若干个点包起来,并且线距离任何一个点的距离都不小于r。求这条线的最小距离是多少?solution: 直接求凸包,然后凸包的周长加上一个圆的周长即可。*/#include #include #include #include #include #include using namespace std;const int maxn =

2017-02-26 10:50:57 216

原创 poj3168(扫描线)

/*translation: 给出几个长方形的位置以及边长情况,问能扩张的长方形有几个。solution: 从上到下,从左到右扫描两边。预先对每条边排序,扫到这条边时,对其和这条边位置相同的边进行判断,是否有 重合的点。如果有,那么这两条边各自对应的长方形就不可能扩张了。note:*/#include #include #include #include using na

2017-02-26 10:46:45 780

原创 poj2187(凸包)

/*translation: 给出n个点的位置,计算出距离最远的一对点的距离。solution: 求凸包然后枚举凸包上的点计算即可。note: * 旋转卡壳法更加高效。*/#include #include #include #include #include #include using namespace std;const int maxn = 50000 +

2017-02-26 10:42:18 309

原创 aoj2201(极限情况)

/*translation: 有n个宝石,宝石为圆形。给出现在有根金属棒,靠近宝石距离m之内就会吸附上去。现在给出每颗宝石的信息,求用这个棒子一次 能钓出最多多少个宝石?solution: 极限情况 每个宝石可以看成两个圆(本来的圆+半径加上m的圆)。对这些圆形一一枚举,即可求出各自的公切线(即金属棒)。然后 求出此时能吸附多少宝石。逐一更新即可。note: # 为何最后计算吸附

2017-02-26 10:33:36 278

原创 poj2079(*凸包内最大三角形面积)

/*translation: 给出一组点,从这些点里面选择三个点构成三角形。求这个三角形面积最大是多少?solution: 凸包 很容易想到三角形的三个点肯定在凸包上面,但是关键怎么找出来三个点。一一枚举肯定超时。note: * 如果固定一条边的话,那么枚举剩下的一个点,在枚举过程中面积肯定有达到极大值后又减小。根据这一特性,可以先固定 一点i,然后让另外两点a,b不断旋转来找

2017-02-25 16:41:51 1419 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除