自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ZXLS-ZMR的专栏

足迹, 学路漫漫,吾将上下而求索。

  • 博客(27)
  • 资源 (2)
  • 收藏
  • 关注

原创 POJ 1654 Area 多边形面积

此题虽然简单,但精度问题可能会让人WA。#include#include#includeusing namespace std ;struct node{ int x,y;}p[1000005];double cross(node a,node b,node c){ return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);}int

2013-08-31 16:21:03 565

原创 HDU-2036 多边形的面积

简单的几何入门题。把多边形划分成n-2个三角形,然后叉积的一半就是一个三角形的面积,相加就可以了。#includestruct node{ int x,y;}p[105];double count(node a,node b,node c){ return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);}int main(){ int

2013-08-31 11:58:58 661

原创 POJ 2007 极角排序

水题一个,利用叉积来判断点位置。#include#include#includeusing namespace std;struct node{ int x,y;}p[55];bool cmp(node a,node b){ return (a.x-p[0].x)*(b.y-p[0].y)>(a.y-p[0].y)*(b.x-p[0].x);}int main(){

2013-08-30 21:44:04 629

原创 HDU-4704 找规律

本题是要我们看懂题意:S(k)是表示从{x1,x2,x3....xk)中选取k个可以使得x1+x2+x3+...xk=N,问我们求(S(1)+S(2)+....S(k))%Mod=?,Mod=10^9+7;简要分析:s(k) 意思从集合中选取k个元素可以使得他们的和为N,这就相当,ans=(S(1)+S(2)+...S(k))%Mod,这就相当于把数字N拆分有多少种方案,答案是2^(N

2013-08-29 20:39:29 602

原创 HDU-4689,dp啊!

题意:艰涩难懂的题意!,n个1,2,3...n的数,它的错排,错排后的序列与原来的序列相减,满足给定的符号。(+,-)。我dp好惨啊,不会搞啊!dp[i][j]表示前i个还有j个符号没确定。如果是第i个是加号,则从前面选,否则从后面选。#include#includetypedef long long LL;using namespace std;int main(){

2013-08-22 10:28:43 1024

原创 POJ-1696 极坐标排序

先不会,后来看了discus才知道,用极坐标排序,换句话说,按着偏转的角度从小到大,相同的按距离从小到大。最后形成的路线是一个螺旋形的折线。#include#includeusing namespace std;struct node { int id,x,y;}p[105];node rec[105];int pos,cnt;int Judge(node a,nod

2013-08-20 14:02:38 782

原创 POJ-2653 Pick-up sticks(线段相交)

题意:一次投放一条木棍,问投放n次夹在上面的木棍有多小,并按顺序输出。按顺序判断线段相交,水题一个。代码:#include#define eps 1e-8using namespace std;struct node{ double x,y;}point[400005];int rec[1005];int cnt;double Judge(node a,node

2013-08-19 21:30:26 665

原创 POJ-1556 线段相交的判断与最短路(几何+图论)

题意:在10*10的房间里,有些墙,问你从源点(0,5)到对面的点(10,5)的最短路,不能穿过墙。分析:或许看到了最短路,这题大概就有思路了,到我还是有点疑问,”为什么最短的路一定要从墙的端点过去,有没有存在一条路径从某一点(不在这些点)使它能直接到达目的地“?而这些点是有可能的。但我听别人说过端点就行了,我也不再去追究了。如果是过端点,那就好办了,由于点不多,枚举所以可能的

2013-08-19 16:12:24 743

原创 POJ-1269 直线相交的判断及交点

题意:给了两个线段的两个端点的坐标。求他们相交的类型,如果正规相交并求出交点。分析:用点叉积,可以判断线段的相交类型(平行,共线,相交).大概是: 如果相交:设交点:p0(x0,y0),根据交点在两个线段上有方程:   (p1-p0)X(p2-p0)=0;   (p3-p0)X(p4-p0)=0;展开就行了。看代码就知道了:#include#includeu

2013-08-18 11:15:46 747

原创 poj 3304-Segments 线段相交的判断

题目连接题意:有n条线,是否存在一条直线使得它们在这条直线上的投影至少有一个公共交点。题意可以转化为:去任意两个点组成的线段与所有的线段相交。分析:判断两线段是否相加:可以用向量法。如果两直线相加则必定有一条线段的两个端点位与另一线段的两侧,那就有:  设p1p2 ,q1q2两线段相交:(p1-q1)X(q1-q2)*(p2-q1)X(q1-q2)>=0,注意’X‘是叉积,

2013-08-17 19:55:25 591

原创 poj 2398-几何二分搜索

题目连接此题和poj2318一样。稍微有点的变化就是边的输入没有按从小到大。先排序就可以套用poj2318代码了。#include#include #includeusing namespace std;const int M=1005;struct node{ int l,r;}line[M];int xa,xb,ya,yb;int toys[M],cnt[M]

2013-08-17 14:51:48 667

原创 poj 2318-几何二分搜索

题意:有n个直线,把矩形((x1,y1)->(x2,y2))(对角线的坐标)划分n+1块,告诉你n条直线的两端坐标。有m个玩具,给出它的坐标,问你每个区间的玩具个数。分析:根据题意给出的直线告诉了我们y轴坐标。因为x轴可以知道(x1,yi),(x2,yi)。由于直线是不会相交的。那么区间直线的x值是递增的。所以可以二分:根据两点式:                (x-x1)/(x

2013-08-17 11:05:42 633

原创 poj 2774 后缀数组(最长公共子序)

表示后缀数组还没完全弄明白:看罗穗骞的论文。贴下参考代码:#include#include#includeusing namespace std;#define maxn 200002int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int cmp(int *r,int a,int b,int l){return r[a]==r[b]&&r[a

2013-08-15 21:51:20 732

原创 HDU-4666 最远曼哈顿距离

题目连接此题值得分析:曼哈顿距离:两个点所对应的坐标差的绝对值之和。比如在一维空间:x1,x2.   d=|x1-x2|,二维空间:(x1,y1),(x2,y2)    d=|x1-x2|+|y1-y2|     三维空间(x1,y1,z1),(x2,y2,z2)d=|x1-x2|+|y1-y2|+|z1-z2|,以此类推。。。看到绝对值,我们就想到去绝对值。如果在二维空间:d=|

2013-08-15 11:02:02 668

原创 HDU-1106 快排模板 和 基数排序

基数排序:基数排序是一种线性的排序算法。设n个元素不超过d位,而且每位都介于0到9之间。基本思想是把最高位或(最低位)的数字看做第一关键字,次高位(次低位)数字看作是排序的第二关键字,一次类推..。  比如: 26 25 43 12 5 33    (按着次低位)先有十个桶:0 1 2  3  4  5  6  7  8  9  或m个桶0按个位 --->    (12)    (

2013-08-14 17:35:32 977

原创 HDU-1199 color the ball

唉!这题完全没必要用线段树,用一个很常规的方法就可以过了。不解释,常规方法就A了。#include#includeint q[100005];int main(){ int n,Lpos,Rpos,a,b,L=100005,R=-1,color; char op[2]; while(scanf("%d",&n)!=EOF){ memset(q,0,sizeof(q));

2013-08-12 16:59:20 904

原创 HDU-1060 Leftmost Digit

这题本来不想贴,看上去很简单,但又不明白为什么能这样?这是么定理?#include#includeint main(){ int t; __int64 n; scanf("%d",&t); while(t--){ scanf("%I64d",&n); double a=n*log10(n*1.0); a=a-(__int64)a; //去小数的部分。 p

2013-08-12 11:00:54 674

原创 HDU-1069 Monkey and Banana (DP)

题意:  有n中不同类型的长方体,同一种类型的长方体可以无限多。只要放置在上面的长宽严格小于下面的长宽就可以放置,因为必须留下适当的空间让猴子爬上去,问你n种长方体可以搭成最高的高度。分析:这题很容易想到用动态规划实现。考虑到每个长方体有六种 放法,而且按着所给的条件放置,先对其进行排序,按着长(宽)排序。用dp[I]表示放置 i个长方体所达到的最高的高度。代码:#in

2013-08-12 08:38:50 879

原创 poj-1142 Smith Number(分解因子)

题意:  一个数分解成质因子相乘,原数的每个位相加等于分解后的数每个为相加的和。此题就是分解因子。主意,素数不能算,否则WA。#includetypedef long long LL;void bitsum(LL n,LL *s){ int t; while(n){ t=n%10; n/=10; *s+=t; }}int main(){ LL

2013-08-10 23:08:42 718

原创 poj-1160 post office (dp)

题意: 根据每个村庄的距离,在这些村庄里建一些office使得每个村庄到最近的office距离和最短。分析: 如果此题建一个office,那么很容易得到,只要建在中间,就一定是最小的。这就是中值最小法,而这题是建立多个office,那么应该区间dp。设dp[i][j]在前j个村庄也建立了i个office。对于每个区间i到j,取中间的作为建立点。用dis记录每个区间最短距离。那么

2013-08-10 19:27:43 654

原创 poj-2914 最小割stoer算法

这题说是模板题,用stoer算法可以过,关于这个算法,网上很多雷同的讲解,自己就没必要再贴一份了(搞不清谁是原著)贴一个模板吧(提交是8000多ms,看牛人将可以达到500多ms,求牛人指点啊)#include#include#include#define INF 1000000000using namespace std;const int N=505;int graph[N

2013-08-10 10:45:57 748

原创 HDU-4602 partition 找规律

分析:看了解题报告,先没看懂,后来恍然大悟。但k>n 显然是不存在的答案为0;当1分两种情况讨论, 取k个连续的点不包含端点。在n个位置区k个连续的点有n-1-k种,在就是把剩余的n-k-2位置任意分割,相当于n-k-2任意拆分,根据题意提供f(n)=2^n。很快就得到(n-k-1)*2^(n-k-2);如果含有端点,最前和最后,有2种,那么就有2*2^(n-k-1)加

2013-08-09 21:19:11 635

原创 HDU-4662 MU puzzle

此题是找规律题,发现规律就不难了。首先,可以肯定字符串中只能有一个‘M",而且必定在第一个。先做出来I相当于1,U相当于3.我们发现三个I相当于一个U,而U是由I变来的,把U还原成3个I,I的个数总是2^n个,而三个U相当于一个U,也就意味着在原来的变换中会多出6个I。所以可以推测sum%6==2||sum%6==4,最后剩下2和4,都可以变。考虑MI是原来的字串,所以sum=1也算。

2013-08-09 09:07:01 723

原创 HDU-4633 poyla计数

题目连接具体分析见这个:点击打开链接解释下:  有polya定理:M= 1/G*∑m^c(ði)   G 是置换群的个数。m代表染色数。c(ði)代表每个置换群ði循环节的个数       说明:i(1---->G)。根据此题:置换群G=24个。m=k个染色。c(ð1)=8+12+54=74*1,  c(ð2)=(4+4+18)*2*4=26*8,  c(ð3)=(2+3+

2013-08-08 09:39:14 1323

原创 HDU-4649 dp压缩

这个说的不错#include#include#includeusing namespace std;double dp[205][25];double p[205];char op[205];int num[205];int n;void solve(){ for(int i=1;i<=n;i++){ for(int j=0;j<=20;j++){ int t

2013-08-07 20:56:33 582

原创 HDU 4648 magic pen

题意:去掉连续的数,使得它们的总和mod一个数不变。分析:模(m)一个数不变,在某些连续数字会存在能被m整除。除掉这些数,对余数是没任何影响的。故可以转化为:在n个数中,取出连续的的数使得它们的和能被m整除,求最多可以去多小个。这题和最大连续子序类似。于是设有:s[i]表示前i个数的总和。那么,要求得的是:(s[j]-s[i-1])%m==0 的条件下。求j-i+1的最大值(i到j相隔最远)。

2013-08-07 11:37:02 723

原创 HDU-4651 整数分解(生成函数)

题目连接题意:将数字n分解,求p(n)得个数。听说很多人都在看这个:点击打开链接我也不多说了:#include#define mod 1000000007__int64 f[100005];int w[100005];int main(){ int p=1,t,n; w[0]=0; for(int i=1;w[p-1]<=100000;i++){ w[p++]=

2013-08-07 10:25:27 799

学生成绩管理系统

该学生成绩管理系统,功能比较齐全,对于初学者,是涵盖c语言的所有知识。

2013-03-08

插入排序.cpp

是关于插入排序的c语言源代码。代码简单,易懂。非常适合刚学的读者。

2013-03-08

空空如也

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

TA关注的人

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