- 博客(189)
- 资源 (1)
- 收藏
- 关注
转载 hdu 1568 求斐波数的前四位
hdu 1568 (log取对数 / Fib数通项公式)2007年到来了。经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。接下来,CodeStar决定要考考他,于是每问他一个数字,他就要把答案说出来,不过有的数字太长
2013-05-07 18:09:46
815
原创 tarjan
struct edge { int v , nex; }e[maxm];int k ,head[maxn];void addedge(inta,int b) { e[k].v = b; e[k].nex = head[a]; head[a] = k++; }//链式前向星int dfn[maxn]
2013-04-26 15:05:02
729
原创 欧拉回路与欧拉路
对无向图: 定义:给定无孤立结点图G,若存在一条路,经过图中每条边一次且仅仅一次,该条路称欧拉路,若存在一条回路,经过图中每边一次且仅仅一次,该回路称为欧拉回路。具有欧拉回路的图称为欧拉图,不是柏拉图。定理:无向图G具有一条欧拉路,当且仅当G是连通的,且有0个或者是两个奇数度得结点。推论:无向图G具有一条欧拉回路,当且仅当G是连通的,并且所有结点的度数均为偶数。一
2013-03-30 18:40:44
646
原创 hdu 3018 一笔画问题
题意:给出一个图,求至少画几次可以把每一条边都遍历一次。思路:找连通块,如果该连通块中存在奇数度的点,那么笔数为奇数度的点 / 2 ,如果该连通块中没有奇数度的点,那么一笔可以画出,也就是存在欧拉回路。#include#include#includeusing namespace std;const int maxn = 100010;int father[maxn] , vis
2013-03-29 20:50:01
696
转载 图论基本知识点
转载于:http://blog.youkuaiyun.com/niushuai666/article/details/67505161.图的定义由若干个不同顶点与连接其中某些顶点的边所组成的图形就称为图。(顶点的位置以及边的曲直都是无关紧要的,而且也是没有假定这些顶点和边都要在一个平面内,只关心顶点的多少和这些变是连接哪些顶点的),通常用大写字母G表示图,V表示所有顶点的集合,E表示边的集合,记作G
2013-03-26 21:11:07
713
转载 二分注意边界问题
我之前写过两篇关于二分查找算法的文章,这篇算是一个小结.我给这份文档整理了一份pdf格式的文档,可以在这里下载.二分查找算法学习札记说明作者:那谁blog: http://www.cppblog.com/converse转载请注明出处.二分查找算法基本思想二分查找算法的前置条件是,一个已经排序好的序列(在本篇文章中为了说明问题的方便,假设这个序列是升序排列的),
2013-03-23 20:07:02
1000
转载 最长上升子序列
转载于:http://blog.youkuaiyun.com/wangkechuang/article/details/7949151最长上升子序列问题是各类信息学竞赛中的常见题型,也常常用来做介绍动态规划算法的引例,笔者接下来将会对POJ上出现过的这类题目做一个总结,并介绍解决LIS问题的两个常用算法(n^2)和(nlogn).问题描述:给出一个序列a1,a2,a3,a4,a5,a6,a7...
2013-03-23 11:35:00
625
转载 Graham's Scan法求解凸包问题
参考:http://blog.youkuaiyun.com/hqd_acm/article/details/6218420http://www.cnblogs.com/kuangbin/archive/2012/09/29/2707961.html概念凸包(Convex Hull)是一个计算几何(图形学)中的概念。用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层
2013-01-24 00:01:57
563
原创 poj 2318
题意:给出矩形的左上和右下的坐标,在矩形中有n个木棒,木棒之间不会相交,然后给出木棒上下端点的横坐标,接着有m个玩具,给出玩具的坐标。输出木棒围成的区域中有玩具的个数。思路:由于数据范围大,所以对有序的木棒二分,叉积判断点在木棒的哪端。#include#includeusing namespace std;const int maxn = 5010;struct point {
2013-01-23 00:11:42
1135
原创 矩形覆盖
NYOJ http://acm.nyist.net/JudgeOnline/problem.php?pid=16题意:给出一系列的矩形长宽,求符合矩形嵌套的最多矩形。。思路1:白书上说的DP。。。如果矩形A可以嵌套在矩形B中,那么map[A][B]有边,最后在这些矩形中找到从一个矩形出发的最长路。#include#include#includeusing namespace st
2012-11-14 15:04:40
1168
原创 hdu 1010 奇偶剪枝
题意:给一个字符矩阵,S是起点,D是终点,X不能走,其它地方可以走,求T步数的时候是否能从S恰好走到T。。。思路:开始题意理解错了,以为就是个BFS(),WA掉。。。后来看了discuss是dfs()。。TLE掉,后来上网搜,原来得加个“奇偶剪枝”的东西、、、奇偶剪枝:http://www.cnblogs.com/newpanderking/archive/2012/10/09/27169
2012-11-13 19:46:21
563
转载 poj 2299 归并求逆序数
题意:给出一些数,然后求这串数字的逆序数,也就是从这个状态到升序状态的最小步数。思路:归并排序,同时累加子问题的逆序数。http://blog.youkuaiyun.com/morgan_xww/article/details/5742926#include#include#includeusing namespace std;int a[500010];__int64 ans;i
2012-11-10 09:10:54
480
原创 hdu 1006 时钟求交集
题意:给出一个角度,然后求一天中时针、分针、秒针互相的夹角都大于等于这个夹角的概率。。思路:开始的思路就是枚举,但是由于精度问题,果断TLE、、、 膜拜网上各种解法啊,主要就是个数学问题、、但是真心不会啊,这道题学到一些,处理时钟问题的方法吧,还有区间求交集什么的。。。http://blog.youkuaiyun.com/lulipeng_cpp/article/details/7320710 O
2012-10-30 21:35:21
2282
1
原创 hdu 2809 状态DP 三国吕布
参考于 http://blog.youkuaiyun.com/woshi250hua/article/details/7746780题意:吕布一个人单挑N个英雄,没打一个英雄一定要有一个人死才行,求最后如何打才能剩下的血量最多。思路:状态DP ,dp[i]为,状态i下剩余的血量,用 0 1 表示该位置是否杀死了该敌方英雄。。#include#include#include#includeu
2012-10-28 01:19:17
855
原创 Codeforces Round #147 (Div. 2)
A 拨开题意就是求,最多重复的时间,然后记录下个数就行、#include#include#include#includeusing namespace std;int main() { int n; set myset; set::iterator it; string str; while(~scanf("%d",&n)) {
2012-10-26 08:44:45
469
原创 poj 3254 炮兵的简化版
题意:给出个N*M的矩阵,1可以放,0不可以放,相邻之间不能放,求放的方法数。思路:最后有bug,还是参考的@ZeroClock大神。。。 poj 1185炮兵阵地的简化版。 #include#include#include#define Mod 100000000using namespace std;int dp[15][4200];int map[15][15]
2012-10-23 00:39:10
408
原创 体积为负数的DP
参考与:http://blog.youkuaiyun.com/actangy/article/details/7433992题意:给出n个 si 和 fi , 要求si和fi的和 都不能是负数的前提下,求Σsi+Σfi的最大和。思路:见参考。。。我是弱B。。。╮(╯▽╰)╭#include#include#include#define inf 10000000using namespace
2012-10-05 16:14:34
624
原创 2012 ACM/ICPC 长春赛区网络赛
1001 A Simple Problem with Integers参考地址:http://www.haogongju.net/art/1637871题意:有两种操作,一种是更新区间a~b中 a 思路:明显的线段树 , 但是依然跪倒啊、、、cnt[i][k] = c 代表当前区间i 每隔k个字符累加c, 然后就是更新,如果存在要更新的区间那么直接更新就行,否则左孩子依旧
2012-09-19 00:30:35
1581
原创 Codeforces Round #137 (Div. 2)
哎、、 好水啊 准备敲之前一定要想好思路、、、到快结束的时候思路才对、、而且有个JR还总cha我、、最后依然一题悲剧、、A. Shooshuns and Sequence题意:大水、就是把当前kth位置的数字复制到最后,然后删除第一个数字,求最小操作数能把序列变为所有位置的数字都相同。思路:开始脑子进水,写模拟。。。然后变换一次check一次、、果断悲剧好久,后来看看发现点端倪,初
2012-09-11 09:01:26
728
原创 hdu 1059 多重背包
题意:输入n1~n6 代表1~6的 个数,然后求这些数能不能通过分配达到value相等的状态思路:多重背包(详见背包九讲) 能不能装满背包v/2的问题 #include#include#includeusing namespace std;int dp[100000];int v;bool flag;void _com(int c , int w) { for
2012-09-06 19:12:21
377
原创 hdu 1494 跑跑卡丁车
题意:中文题、、、思路:技能槽的状态一共有15种状态0% 20% 40% 60% 80% 100% 120%.....dp[i][j] 代表通过第i条路的技能槽状态是j , 所以要考虑好哪些状态可以到达dp[i][j]是最优的就行了dp[i][j] = min(dp[i-1][j-1] + a[i] , dp[i-1][j+5] + b[i]) . 然后就是处理细节 1.N圈处理
2012-09-06 13:29:08
493
原创 hdu 1712 分组背包
分组的背包问题 问题 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 算法 这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。也就是说设f[k][v]表示前k组物品花费费用v能取得的最大权值,则
2012-09-06 09:53:40
352
原创 poj 1061 青蛙的约会
题意:中文题 不解释了思路:两只青蛙跳了t步,A的坐标是x+mt,B的坐标是y+nt。它们相遇的时间的充要条件是:x+mt-y-nt=pL即:(n-m)t+Lp = x-y ----- ax+mx= b解这个同余方程的非负整数解就行x0解出的是ax+mx=d(d是a , b最大公约数) 有解的时候 d|b 所以把x0扩大d/b倍数即可#include#include#inc
2012-09-02 16:24:47
407
原创 Codeforces Round #135 (Div. 2)
哎、、、我太水了。。。参考各种神代码 @dut200901102 @hanfei @cxloveA. k-String统计字母出现次数 YY即可。。。#include#include#includeusing namespace std;int main() { int cnt[30] , k , i , len , j; char s[1010] , an
2012-08-30 19:48:50
585
转载 扩展欧几里得算法
转载于:http://blog.youkuaiyun.com/zixiaqian/article/details/4480037扩展欧几里德算法 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b
2012-08-25 10:07:25
384
原创 Codeforces Round #133 (Div. 2) 找奇环
B. Forming Teams题意:要平均分配两只队伍,队伍内的人不能有敌对关系,一个人最多可以和两个人敌对,如果没办法按要求分配,那么输出最小要去掉的人数。思路:因为一个人最多可以和两个人敌对,所以如果形成链或者是孤立的点都是可以分配的,如果形成偶数环,那么交错着安排也可以,只要判断奇数环就行,例如1-2 2-3 3-1 必须要去掉一个人,最后去掉后的人如果是奇数的话,那么还得去掉
2012-08-24 08:28:59
1243
原创 poj 2153 map && sort+二分
题意:有N个人,然后有M次考试,每次考试每个人都会有一个分数,然后求每次考试后“Li Ming” 的排名。思路:开始以为就是个sort的排序,后来WA了,原来有trick,排名是按总分来排序的,所以每次考试都要累加得分,但是每个人每次考试的得分如何累加到这个人的得分上,直接暴力TLE...还得用二分啊。。。。#include#include#include#includeusing
2012-08-23 22:57:24
670
原创 ACM对拍程序
ACM对拍程序过程。。。一、用随机程序生成符合题目的输入数据文件名为in.txt如何产生随机数:http://www.cnblogs.com/lvsi/archive/2011/04/21/2024079.html二、用AC的程序和你的程序分别跑数据in.txtAC程序生成out1.txt 你的程序生成out2.txt在生成输出数据的时候最好把输入的一些关键数据也一并
2012-08-14 12:25:01
3981
1
原创 2012 Multi-University Training Contest 4
1004 线性查找 O(n^3)题意:有五个集合,每个集合中最多有200个数,从每个集合中选出一个数判断这五个数的和能否是零。思路:如果直接暴力的话复杂度是O(n^5) TLE , 在网上看到一种所谓的线性查找的方法,刚开始跟这个思路差不多,但是还是TLE。。把第一个集合的第二个集合的所有和的情况组成新的s1,第三个和第四个集合所有和的情况组成s2,然后对s1和s2分别排序 O(n^
2012-08-14 11:44:53
895
原创 poj 2407 求欧拉函数值
题意:给出n求欧拉函数值。以后再把求欧拉函数的方法完善下,看来知识都有连锁反应啊。。。想做一道题得看不少东西。。。先看看欧拉这个鸟人。。#include#include#includeusing namespace std;int phi(int n) { int ans = n; for(int i = 2 ; i*i <= n ; i ++) {
2012-08-11 23:00:01
1122
原创 2012 Multi-University Training Contest 3
1001 质数筛选 判断公共因子题意:判断A进制下的有限小数 能否转化成B进制下的有限小数。题解给的是,只需要判断B中质因子是否包含A中质因子即可。不是很明白,后来问了群里的大牛,现在也算明白些了。整数部分的互相转换不用考虑,一定可以转换的,A进制转化成十进制的小数形式是(1/A + 1/A^2 + 1/A^3 + ... + 1/A^n) 系数不用考虑,想想十进制化二进制的时候是每次
2012-08-10 17:52:24
443
原创 poj 1273 EK 最大流
要了解最大流感觉还是要啃《算法导论》,加上点程序模板基本可以搞个差不多。这是介绍网络流基础的 http://chhaj5236.blog.163.com/blog/static/1128810812009827112857794/这道题就是裸的EK了,唯一注意的是要注意重边的情况。#include#include#include#includeusing namespac
2012-08-10 12:45:47
469
原创 hdu 1269 tarjan
题意:中文题,就是根据给出的一些有向边,判断所有的点是不是在一个强连通里。最最基本的tarjan了,用链式前向星的加边方式。tarjan算法:tarjan#include#include#includeusing namespace std;const int maxn = 10010;const int maxm = 100010;struct edge{ int v
2012-08-05 18:25:39
456
原创 几道水博弈
1、poj 1067 威佐夫博弈(取石子问题)课件上的例题,P态和N态与黄金分割点有关。(0,0) (1,2) (3,5) (4,7) ... P(必败态)满足 a = i*(sqrt(5.0)+1)/2; b = a + i; (a #include#include#includeusing namespace std;typedef long long ll;i
2012-08-05 12:41:12
475
原创 2012 Multi-University Training Contest 2
1001 排序+贪心(不会状态DP)题意:假设你的血是无限的但是攻击力只有1,给出N个人的dps和hp,你每攻击一个人,那么这个人的血量减一,同时你的血量减少值为所有活着的人的dps和,求最小花费多少血量可以把人全干倒。思路:按照dps/hp 排序 ,优先把dps/hp数值高的人干掉。#include#include#include#includeusing namesp
2012-07-28 17:14:50
467
原创 Codeforces Round #124 (Div. 2)
A. Plate Game题意:给出桌子大小,和圆盘的半径,两个人轮流放盘子,盘子不可以重叠,谁先没有地方放盘子,那么这个人就输了。这题尼玛坑爹啊。。。神题+群里大牛神解。。跪了。只要第一个人可以放下盘子,那么他肯定是能赢的,First能放的话就放中间,随便第二个人怎么下,以中心为对称点模仿他就行了。#include#includeusing namespace std;
2012-06-13 00:02:09
3186
1
原创 poj 3450/poj 3080 多串最长公共子串 后缀数组
题意:就是求多串的最长公共子串思路:子串可以看作是字符串中后缀的前缀。把这些字符串连接起来,中间用不能出现的状态隔开,然后求其height数组,二分枚举一个字符串的子串长度,看是否存在连续n个最长公共前缀的长度都大于mid,并且这些公共长度分别属于n个字符串。poj 3080 保证最长的前提下,保证字典序,字典序是用sa数组来保证的,最先找到的公共前缀一定是字典序较小的,然后这些公共前
2012-06-05 23:13:13
508
原创 hdu 1428 漫步校园 优先队列BFS +记忆化搜索
参考:http://blog.sina.com.cn/s/blog_7fec44cf0100ypaq.html题意:从(1,1)点开始走,终点是(n , n),每走一步都要保证距离终点最近,如果和A区域相邻的四个区域离(n,n)点,比A点离(n,n)点更近,那么就可以走,求到终点的方案数。思路:如何判断一个点是否离终点更近?用优先队列的BFS求终点到其它各个点的最短距离,并保存在数组中。(
2012-06-05 11:23:33
537
原创 poj 1226 求多串最长公共子串 或 回文子串 KMP&&strstr&&后缀数组
题意:求给出的字符串中的最长公共子串 ,其中子串可以反转,比如rose 和 orchid , ro 和第一个匹配 , ro 的回文串or 和orchid 匹配 。最后输出最长子串的长度。思路:找出长度最小的子串, 枚举其所有子串 ,然后将其反转再保存 ,最后用这两个串去匹配其它的字符串。#include#include#includeusing namespace std;ch
2012-06-03 20:01:00
783
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人