上一页 1 2 3 4 5 6 7 8 9 ··· 27 下一页
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1115计算多边形内心的模板题思路从第1个顶点出发,分别连接第i, i+1个顶点组成三角形Ti,1 struct node{ double x,y;}p[1000010];double area(int a,int b,int c){ return (p[b].x-p[a].x)*(p[c].y-p[a].y)-(p[b].y-p[a].y)*(p[c].x-p[a].x);}int main(){ int t,n,i; double sumx,sumy,ar,x,y,sumarea; ... 阅读全文
posted @ 2013-08-20 15:39 执着追求的IT小小鸟 阅读(177) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1147套用模板,在链表中删掉与刚输入的这个相交的线段#include#includetypedef struct node{ int num; double x1,x2,y1,y2; struct node *next;}S;double x1[100010],x2[100010],y1[100010],y2[100010];S *l;int same(int a,int b)//这里是判断线段是否相交{ if(((x1[a]-x1[b])*(y2[b]-y1[b])-(y1[a]-y... 阅读全文
posted @ 2013-08-20 11:02 执着追求的IT小小鸟 阅读(225) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1276模拟的蛋疼。。。最蛋疼的是每一次都要报完,不能中途等于三个人就停下来#include#includetypedef struct node{ int num; struct node *next;}S;S *l;int n;void print(){ S *s=l->next,*q; while(s) { if(s->next==NULL) printf("%d\n",s->num); else printf("%d ",s->num); 阅读全文
posted @ 2013-08-20 10:33 执着追求的IT小小鸟 阅读(568) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1086这题是逐一判断某些线段是否相交,输出交点数目。在算法概览里看来的方法不知道怎么解不了。。最后只能用固定一条线段a,并以a的某一端点为向量的出发点,连接另一线段的两端点,得出的两个向量跟a线段的向量进行叉乘,两个叉乘结果再相乘,判断是否大于0,大于0就是线段b的两端点在a线段同侧,然后为了判断类似20 1 0 31 1 3 121 1 1 31 1 3 121 1 3 12 1 2 3这些情况,再固定线段b重复一次刚刚的做法最后两个结果都没大于0,也就表示不同侧,所以表示相交#includedouble 阅读全文
posted @ 2013-08-19 23:12 执着追求的IT小小鸟 阅读(223) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2036这是第一次求多边形面积,看了ppt自己写了这个模板代码这题涉及几个知识点:1,矢量叉乘,表示一个垂直于两个矢量的矢量,有方向,假设叉乘的两个矢量为a,b,a逆时针可以走到b,那么,a×b为正,反之为负2,叉乘过程:a(x1,y1),b(x2,y2),那么a×b=x1*y2-x2*y1;可以列出矩阵来求相乘结果。3,多边形可以化成几个三角形,然后逐一用矢量相乘取绝对值在平分为二得到结果,这是以多边形某一点来做的,而又可以在多边形内取一个点为扇点,连接每个顶点,然后计算每个三角形的面积再 阅读全文
posted @ 2013-08-19 16:16 执着追求的IT小小鸟 阅读(314) 评论(3) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2824筛法求素数,本来要打表,可是超内存,暴力居然没超时,,,对数据无语#includeint phi[3000010];int euler(){ int i,j; for(i=0;i<3000010;i++) phi[i]=0; for(i=2;i<3000010;i++) { if(!phi[i]) for(j=i;j<3000010;j+=i) { if(!phi[j])phi[j]=j; p... 阅读全文
posted @ 2013-08-19 09:38 执着追求的IT小小鸟 阅读(152) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1356这是欧几里得的模板题。。。[扩展眼欧几里德]给定abd找到满足ax+by=d的令|x|+|y|最小|参考线性同余方程g=gcd(a,b),ax0+by0=gcd(a,b)|程的一组解:x=x0*d/g;y=y0*d/g;|方程的全部解:x..=x+b/g*ty..=y-a/g*t||x|+|y|=|x+b/g*t|+|y-a/g*t|(这里有绝对值,所以要想总体会小,那么里面的值要尽量小)|这个关于t的函数的最小值应该在|y-a/g*t|为零附近,即t=y*g/a|在y*g/a附近的两整数点里取t,再直 阅读全文
posted @ 2013-08-18 22:14 执着追求的IT小小鸟 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 拓展欧几里得算法解二元一次不定方程:a*x+b*y=m;因为:gcd(a,b)| a , gcd(a,b)| b ;所以:gcd(a,b)| a*x , gcd(a,b) | b*y ==> gcd(a,b)|(a*x+b*y) ==>gcd(a,b)|m ;所以要求a*x+b*y=m,可以先求a*x+b*y=gcd(a,b).对于:a*x+b*y=gcd(a,b)1.当b==0时,gcd(a,b)=a,此时x=1,y=0;2.先求出 a*x+b*y=gcd(a,b) 的一组解。因为 a*x1+b*y1=gcd(a,b) b*x2+a%by2=gcd(b,a%b)且 gcd(a,b 阅读全文
posted @ 2013-08-18 22:02 执着追求的IT小小鸟 阅读(180) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2689给两个数,是个区间,求出区间内靠最近的相邻两个素数,和离最远的相邻的两个素数思路:先筛出50000以内的素数,然后再在给定的区间内以刚刚的素数为基底,筛出区间内的素数。筛的过程中算出区间左值是最小素数的几倍,然后然后不是整数倍,就往前加1(否则算出的数会不在这个区间里,没意义),然后这个整数倍乘以素数已经大于右边了,那就可以直接退出了。接下来直接按素数的叠加去筛筛完后先找第一个素数,因为在标记的时候把所有的数都标记成了1,所以找到的数有可能是1,但1不是素数,所以进入下一个,然后开始找答案。。。#include__int64 pri[ 阅读全文
posted @ 2013-08-18 19:00 执着追求的IT小小鸟 阅读(247) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4548筛法的话有模板,但是这题因为数据量有10000*1000000,所以如果在查找过程中没有比较优的算法的话,便会造成超时。我自己起先也是超时,后来看了别人的写法,自己学着写了一个,是另外申请一个数组来存储所有的美素数的,数量大概有3w+。数组开少了会爆掉。然后在查找时只有找这个数组就可以了,时间在10000*30000,一般不会超时,ac时间453ms 1 #include 2 #include 3 #define MAX 1000010 4 int pri[MAX],ans[MAX]; 5 int le 阅读全文
posted @ 2013-08-17 21:00 执着追求的IT小小鸟 阅读(533) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 27 下一页