解题
文章平均质量分 70
xuzengqiang
这个作者很懒,什么都没留下…
展开
-
hdu 1098-二项式定理
f(x)=5*x^13+13*x^5+k*a*xf(x+1)=5*(x+1)^13+13*(x+1)^5+k*a*(x+1)若是f(x)e=0,则有f(x+1)e=0,将f(x+1)按二项式定理展开有:f(x+1)=5*(c(13,0)*x^13+c(13,1)*x^12+c(13,2)*x^11+....+c(13,12)*x+c(13,13)*x^0)+ 13*(c(5原创 2012-02-19 18:08:03 · 532 阅读 · 0 评论 -
STL中map和priority_queue的应用
基本的知识就不再讲了,只列下用map做的题目:题1:POJ 1002(487-3279),这个题目烦的死,TLE了n次,只是因为我用G++提交的,好啦,要注意的就是把数组开大点,和用c语言输入,最后如果没有重复的电话号码输出:No duplicates.。#include#include#include#include#include#includeusing na原创 2012-07-19 11:18:30 · 2234 阅读 · 0 评论 -
BFS~~~迷宫
例题1:NYOJ 58(最小步数),保存每一步的步数即可,至于标程中是另外一种算法,后面的讨论个人觉得对这个代码的评价不好,因为标程中涉及到的是另外一种算法,不是说他不会用BFS进行广搜,他只是想告诉你这道题用Floyd-Warshall算法可用,不多说了,纯属个人言谈~~用BFS的时候记得把map放在main里面。#include#include#includeusing nam原创 2012-04-25 15:30:14 · 2090 阅读 · 0 评论 -
取石子游戏之尼姆博弈
尼姆博弈:有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况与二进制有着很大的关系,我们用(a,b,c)来表示某种局势,那么(0,0,0)必然为奇异局势,最后一个面对这个局势的必败。(0,n,n)也是种奇异局势。因为如果对手在其中一堆取m个石子(m直接说结论吧:对于任意的奇异局势(a,b,c),都有a^b^c=0。(^为异或运算原创 2012-07-23 08:43:26 · 1254 阅读 · 0 评论 -
计算几何基础
最基本的概念就是叉积,其实说白了就是三角形的面积的2倍。但是叉积有正负,所以可以用来判定给定的三个点的顺序问题。叉积的公式为:E X C = x1*y2 - x2*y1(在原点的情况)。模板为:double multi(point p0,point p1,point p2)//计算叉积 { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.原创 2012-07-29 10:16:21 · 559 阅读 · 0 评论 -
NYOJ 动态规划
题1:NYOJ 10(滑雪),前面的博文-动态规划中有。题2:NYOJ 15(括号匹配),放在区间动态规划中。题3:NYOJ 16(矩阵嵌套),大概意思给你n个矩阵,这些矩阵相互嵌套,问能够嵌套的最大个数,直接按长度从大到小排序,长度相等则按宽度从大到小排序,由于能够嵌套满足:长1DP[i]=max(DP[i],DP[j+1])(0 #include#include#inc原创 2012-08-14 08:47:09 · 2295 阅读 · 0 评论 -
一些比较经典的题目和结论
1、点P(x,y)绕点o(x0,y0)逆时针旋转a角度后的坐标为P'(x1,y1): x1=(x-x0)*cosa-(y-y0)*sina+x0; y1=(x-x0)*sina+(y-y0)*cosa+y0。2、最大子矩阵和最大子段和模板,例题:NYOJ 1047和NYOJ 14,下面以NYOJ 104代码为例,我觉得也要注意一下讨论区的那组数据,不是输出0,而是-2。原创 2012-04-20 19:49:43 · 1964 阅读 · 0 评论 -
二分图的最大匹配
二分图:图G中顶点集V可以分成互不相交的子集(X,Y),并且图中的每一条边所关联的点分别属于两个不同的顶点集,则图G叫二分图,如图所示:二分图的匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配,当匹配数达到最大时为二分图的最大匹配。当然最大匹配的方案可能不能,但是最终结果都是一样。上图中最大匹配可以由(1,1),(2,2),(3原创 2012-08-11 09:49:21 · 1089 阅读 · 0 评论 -
计算几何-线段
首先是直线相交,这个简单,就是看斜率,斜率不同则相交。重点分析线段与线段相交,给你两组坐标P1(x1,y1),P2(X2,y2),Q1(x3,y3),Q2(x4,y4),判断P1P2与Q1Q2是否相交:首先可以很快排除下面四种情况:对于第①种情况满足条件:max(Q1.x,Q2.x)if(max(P1.x,P2.x)<min(Q1.x,Q2.x)|| min(P1.x原创 2012-07-30 15:08:33 · 839 阅读 · 0 评论 -
计算几何之凸包
这个内容我看了半天,我还是不大清楚,主要靠模板了,更多的知识点击这里,下面是凸包的构造过程:凸包模板为(我把结构体也写了出来):struct Point { double x,y; friend istream& operator>>(istream &cin,Point &p) { cin>>p.x>>p.y; } friend原创 2012-07-29 11:14:34 · 602 阅读 · 0 评论 -
树状数组
我们知道要是一个数组的和C[i]=A[1]+A[2]+.......+A[i],那么我更改其中任意一项值A[i],那么C[i],C[i+1],C[i+2]....C[n]都会随之变化,所以我们要调整C[]当n非常大时就需要很长的时间,必然会导致超时。这样就可以引入树状数组,它的修改和求和的复杂度为nlogn.树状数组是一种数组结构,能够高效地获取数组中连续n个数的和。下面这张图是基本上大多原创 2012-04-30 19:50:12 · 769 阅读 · 0 评论 -
Floyd算法
例题2:POJ 2570,某条道路由一些公司修建,修建道路的公司可以提供这条路上的连通,如第一个测试数据中,从1到2有a,b,c三个公司可以提供路径,现给你任意的两个地点,问有哪些公司可以提供路径。这个题的难点就是给你的字符串如何存储,我们用map[u][v]表示u到v可以由哪些公司提供路径。初始化为0,那么它的二进制的每一位都为0,用0~26的位置表示a~z是否可以提供路径,可以则设为1。如原创 2012-08-09 16:12:52 · 646 阅读 · 0 评论 -
并查集题目总结
有关并查集的知识可以点这里,这里知识说下题目:POJ 1611(意思是有很多人编号为0~n-1,一开始只有编号为0感染了,然后输入多组数据n,m,n是总人数,m为群体数,接着有m行,每一行最前面的一个数表示这个群体的人数,然后输入这些人的编号,在这些群体中只要有一个被感染的话这群人都会被感染,问最后有多少人被感染。)很裸的并查集,直接输出与0在同一个群体的人的个数即可,代码略。原创 2012-08-09 10:38:21 · 641 阅读 · 0 评论 -
并查集
主要是用来处理两个不相交集合的合并和查询的问题,并用一个树根来表示一个集合。合并操作:要合并两个集合S1和S2,那么只需要把S1的根的父亲设为S2的根即可。优化方案:将深度小的树成为深度大的子树,称为启发式合并。查询操作:查找一个元素属于哪个集合,只需顺着叶子到根结点的找到该元素所在的根结点即可。优化:找到该元素的根结点以后将该元素的的父亲设为根节点--路径压缩。 由于深度经常变化,所以我原创 2012-02-27 21:50:35 · 690 阅读 · 0 评论 -
nyist 8(一种排序)
怎么说呢~很简单的一题,提前了几天来学校了,看看别人,再看看自己,简单的c++基础都没有学会,还学着做OJ上的题目,看来什么都的踏踏实实的,一步一个脚印,不能盲目的做题,要花时间看书和别人好的做法,近几天看了我们c++教程,知道了c++的大概,过两天再看c++ Primer,一定要踏踏实实的,好吧,分析下这个题: 用sort和qsort可以简单过,不分析,现在贴下重载函数的做法,看原创 2012-02-20 09:48:19 · 398 阅读 · 0 评论 -
NYOJ解题报告~
题1:NYOJ 170(网络的可靠性),即要求每个顶点的连线不能少于两条,只需判断哪些点的连线只有一条后,而这些点重新连为2条边需添加的边数为(sum+1)/2.sum为连线只有一条的点个数。自己可以用笔在纸上画下即可。代码为:#include#includeusing namespace std;const int MAX=10010;#define CLR(arr,val)原创 2012-04-24 08:31:22 · 851 阅读 · 0 评论 -
次小生成树
次小生成树一定是最小生成树换一条边形成的,最小生成树的模板点这里。同样的道理可以使用Prime算法和Kruskal算法。 惯例,使用例题作为说明,例题:NYOJ 118(修路方案)方法1:首先求出最小生成树T,然后枚举添加每条不在最小生成树上的边(u,v),由于最小生成树连接了所有的点,那么再添加一条边的话一定会形成一个环。找到环上权值第二大的一条边(即除(u,v)以外的权值最大的一条原创 2012-05-13 22:30:29 · 644 阅读 · 0 评论 -
NYOJ 514(整数中的1)
有篇博文写的是统计二进制中1的个数和,这篇是统计区间内十进制的1的个数和,题目链接:NYOJ 514。先讨论下1到n间的1的个数和。给你一个数如:384,求1~384的1的个数之和。那么我只需求出1~300中1的个数和+1~80中1的个数和+1~4中1的个数和。1~4的1的个数为1,1~80中1的个数为101(十位数)+8*100(个位数)----十位数有10,11,12,13....原创 2012-06-06 09:11:11 · 1144 阅读 · 0 评论 -
矩阵的应用--矩阵相乘与矩阵快速幂
以下内容转自Matrix67大牛的文章。稍作修改~矩阵相乘:矩阵的乘法满足结合律--(AB)C=A(BC),及分配律-(A+B)C=AC+BC,但是不满足交换律。不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个转载 2012-06-08 08:15:50 · 3237 阅读 · 0 评论 -
矩阵-斐波那契数列
利用矩阵来求解斐波那契数列的有关问题是ACM题中一个比较常见的题型。例:NYOJ 148(斐波那契数列2)。有关斐波那契树列的规律详见这里。(1)、对于n>1,都有f(n)与f(n-1)互质。(2)、f(n)=f(i)*f(n-i-1)+f(i+1)*f(n-i)。现在说说怎么利用矩阵来求解斐波那契数列。我们可以先保存b=f(1),a=f(0),然后每次设: b'=a+b a'原创 2012-06-08 13:39:19 · 13814 阅读 · 2 评论 -
又见高精度
具体模板我前面的博文中有:大数类模板,我一直都在用这个模板,我认为比较的好,思路较为清晰,好吧,再次复出啦。高精度加法:具体见POJ 2413(有多少个菲波数?),意思不难理解,求区间[a,b](a一般思考方法,枚举,但是题目中说了a大数类模板中的高精度相加的模板:#include#include#includeusing namespace std;const int原创 2012-07-16 10:56:39 · 998 阅读 · 0 评论 -
计算几何求公式
例题1:POJ 1380(矩阵的包含),给你两个矩阵的长和宽,问前面这个矩阵能否包含后面这个矩阵。(1)、当前面的矩阵的宽(2)、当前面矩阵的面积(3)、当前面矩阵的长,宽>后矩阵的长,宽,能够包含。(4)、特别注意前矩阵宽>后矩阵的宽,但是长 判断只需要后面这个矩阵在水平方向上的投影之和C*cos∠2+D*sin∠2,自己认真看看,具体见代码。#include原创 2012-08-02 11:13:36 · 841 阅读 · 0 评论 -
牛顿迭代法
牛顿迭代法:设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x原创 2012-08-03 15:50:24 · 802 阅读 · 0 评论 -
取石子游戏之巴什博弈
下面这段来自白白の屋的文章的一段:巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果原创 2012-07-19 16:00:06 · 6945 阅读 · 0 评论 -
取石子游戏之威佐夫博弈
下面博文中有一部分是转载自ACM and JAVA的文章。威佐夫博弈:有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。我们用(ak,bk)(ak局势。如果甲面对局势(0,0),说明甲输了,我们把这种情况叫做奇异局势。现在的问题我给你一个局势(a,b),我们怎么判断它是不是奇异局势呢?判断公式为:ak=[k(1+√5)原创 2012-07-20 23:28:07 · 1183 阅读 · 0 评论 -
区间动态规划
1、矩阵连乘,tyvj 1198(最优矩阵连乘),关键是写出动态转移方程。用DP[i][j]表示矩阵Ai乘到Aj的最优解,P[]用来存储矩阵的行和列,M[i-1]表示矩阵i的行,M[i]表示矩阵i的列。当i==j时,DP[i][i]=0;当i(A3A4A5A6A7A8)A9。我们知道若A矩阵为r1*c的矩阵,A2为c*r2的矩阵,得到的将是一个r1*r2的矩阵,且连乘次数为r1*c*r2。原创 2012-08-14 09:19:19 · 6444 阅读 · 0 评论