
POJ
文章平均质量分 70
丶阿明
Hello World!
展开
-
POJ 3090 Visible Lattice Points
分析:问你从原点(0,0)向区间0# include int Euler(int n) { int i,ans=1; for(i=2;i*i<=n;i++) { if(n%i==0) { n/=i; ans*=i-1; }原创 2015-07-25 20:47:15 · 490 阅读 · 0 评论 -
ZOJ 1081 Points Within
分析:按顺序给你n边形的n个坐标,和一些点的坐标,让你判断这些点是不是在多边形内。用改进弧长法来求解比较好,原理可参看网上的,下面附我写的代码。# include typedef struct point { int x,y; }Point; Point v[105]; int main() { int i,n,m,cur,nex,ans,f,原创 2015-08-13 20:42:41 · 460 阅读 · 0 评论 -
POJ 1385 Lifting the Stone
分析:给你一n边形,和n个顶点的坐标,让你求多边形的重心。思路就是将第一个点和其余点相连,这样就组成了n-2个三角形,然后求这n-2个三角形的重心,再按照质点组的重心求就可以了,公式是:其中A表示质点的坐标,m表示质点的重量,转化为多边形就是,这n-2个三角形的重心坐标,和n-2个三角形的面积,因为可能是凹多边形,这样凹进去的面积就是负的,质量也是负的,所以计算时不影响。# include原创 2015-08-13 20:35:20 · 754 阅读 · 0 评论 -
POJ 1228 Grandpa's Estate
分析:给你一些点,这些点都在凸包的边或顶点上,问你凸包是不是稳定的,稳定凸包就是每条边上都至少有3个点,否则再多加一个点能形成更大的凸包,如果一条边上有>=3个点,这样在多加一个点,虽然也可能会形成更大的凸包,但一定不满足所有点都在边上,所以每条边都应该至少有3个点才稳定。用Graham扫描法求凸包时,会将除最左下角的点外其余的点排序,排序的规则是按照其余点和最左下角的连线和x轴所形成的角度排序的原创 2015-08-13 20:10:18 · 608 阅读 · 0 评论 -
POJ 1113 Wall
分析:给你n个点的坐标和半径l,求形成的凸包的周长和一个圆的周长和,结果4舍5入。求凸包就用Graham扫描法就好了,以下附两个代码,意思都差不多,要注意的是,double类型的变量存在误差,所以判断是否相等时应该是:a-b# include # include # include # define PI acos(-1.0)# define EPS 1e-8 using name原创 2015-08-12 21:22:45 · 356 阅读 · 0 评论 -
POJ 2187 Beauty Contest
分析:给你一些点,让你求距离最大的两个点之前距离的平方。首先求出凸包,然后可以枚举凸包上所有顶点的距离找到最大值,也可以用旋转卡壳来求凸包直径。后者原理网上很多,解释的也挺好,我就放下我的代码就好了。# include # include using namespace std; struct point { int x,y; }v[50005]; int原创 2015-08-14 22:47:22 · 379 阅读 · 0 评论 -
POJ 1279 Art Gallery
分析:题目就是让你求多边形的核的面积,多边形的核就相当于在某一点能看到所有顶点(不穿过边),这些点的集合就是多边形的核。# include # include # define EPS 1e-8 struct point { double x,y; }; void Swap(point &a,point &b)//交换两点 { point t;原创 2015-08-16 22:58:12 · 551 阅读 · 0 评论 -
POJ 3009 Curling 2.0
分析:题意就是玩冰壶,2是起点,3是终点,1是障碍物,冰壶在静止状态下,可以往上/下/左/右抛出,且抛出的那个方向的下一个点不能是障碍物或抛出界,抛出后沿直线运动,直到碰到障碍物(障碍物会消失,冰壶会停在障碍物前一个点),或出界(出界就gameover了),如果不能到达终点或抛出冰壶的次数>10次,输出-1,否则输出最少需要抛几次才能到达终点。我们用DFS遍历所有情况,如果抛出的次数>10 了原创 2015-10-23 23:46:30 · 486 阅读 · 0 评论 -
POJ 1579 Function Run Fun
分析:题意很简单,调用函数,根据a,b,c的值在递归调用函数。我们只要把w(a,b,c)从(1,1,1)计算到w(20,20,20)就行了,询问时直接就可以输出了。# include int dp[25][25][25]; int Dp(int a,int b,int c) { if(a<=0||b<=0||c<=0) return 1;原创 2015-10-24 00:46:15 · 524 阅读 · 0 评论 -
POJ 1584 A Round Peg in a Ground Hole
分析:给你n边形的坐标、圆心坐标和半径,问你这n边形是不是凸多边形,如果不是输出:HOLE IS ILL-FORMED,否则,如果圆在凸包内就输出:PEG WILL FIT,否则输出:PEG WILL NOT FIT。因为这n边形的坐标是按顺时针或逆时针给出的,所以判断时只有看每相邻两边的叉积符号是否相同,不同的话就不是凸包。在判断圆心是否在凸包内,这个也好判断,也是看叉积符号是否一致,再判断有没原创 2015-08-12 21:15:28 · 659 阅读 · 0 评论 -
POJ 1106 Transmitters
分析:给你半圆的圆心,半径和一些点的坐标,问你这个半圆绕圆心旋转最多能覆盖多少点。能覆盖的点,点到圆心的距离肯定是小于等于半径的,将这些点找出来,然后分别以圆心和这些点的连线为半圆的一条边,判断有多少点是在这条边的同一侧。# include # include struct point { int x,y; }; point v[150],p; double原创 2015-08-13 19:44:40 · 488 阅读 · 0 评论 -
POJ 2155 Matrix
题意:给你一个N*N的矩阵,一开始矩阵内的数字全为0,再给你一个矩形坐标,左上角为(x1,y1),右下角为(x2,y2),要你改变这个矩形中的数字,如果是1的话,改为0,如果是0改为1,查询时给你矩阵中的一个点的坐标(x,y),要你输出这个点的值。分析:改变矩形中的点,可以看做是4次变化:分别以(x1,y1),(x2+1,y1),(x1,y2+1),(x2+1,y2+1)为左上角,(n,n)为原创 2015-07-10 22:30:53 · 485 阅读 · 0 评论 -
POJ 1042 Gone Fishing
分析:题意就不说了,枚举出从起点1到终点e(1# include struct//从第1个湖到第e个湖之间 { int count;//能钓到鱼数量的最大值 int f[30];//每个1到e之间每个湖能钓到的鱼的数量 int time[30];//在1到e之间每个湖钓的时间 }end[30]; int main() { int i,j,n,h,e原创 2015-06-06 23:29:58 · 545 阅读 · 0 评论 -
POJ 2352 Stars
分析:给你n颗星星,让你输入星星等级分别为0~n-1的星星数,一颗星星等级就是这个星星左下角的星星数,不包含这颗星星本身,包含在同一水平线或同一竖直线上的点。因为星星的y是递增的,y相同则x递增,所以一颗星星的等级就是除这颗星星外的其他星星的横坐标小于等于这颗星星的星星数。可以用树状数组很快的解出来。# include # include int c[32005],level[3200原创 2015-07-13 20:07:04 · 481 阅读 · 0 评论 -
POJ 2887 Big String
分析:给你一串字符,让你进行一系列插入和查询操作,查询时输出第p个字符,数组插入慢,链表查找快,于是我们用块状链表。# include # include # include typedef struct node { int len; char a[1005]; struct node *next; }Node; int max;原创 2015-07-13 20:49:26 · 601 阅读 · 0 评论 -
POJ 1056 IMMEDIATE DECODABILITY
分析:题意很简单,就是判断有没有一串编码是另一串的前缀,这让我想到了赫夫曼编码(比如对于一串字符串含有ABCDEFG,用二进制字符来代表字母,先构造一颗赫夫曼树,从根节点开始走,往左走是0,往右走就1,一直走到叶节点,从根节点到叶节点经过的路径就是一个叶节点字母的二进制字符,因为每个字母都是叶节点,所以不存在一个字符的编码是另一个的前缀)。于是我们用数组来表示满二叉树,如果从根节点到一个节点的路径原创 2015-07-13 19:33:27 · 499 阅读 · 0 评论 -
POJ 2481 Cows
分析:每一头牛都一片领域[s,e]如果一头牛的[s,e]包含另一头牛的[s,e],那么就比另一头牛强,于是我们先把牛排序,e大的排在前,相等的话就s小的排在前,这样排在前面的牛一定不会比排在后面的牛弱,如果两头牛的s和e都相等的话,那么比他们强壮的牛的数量也相等,不然的话求比一头牛强的数量只要求出s# include # include # include using namespa原创 2015-07-13 20:23:28 · 408 阅读 · 0 评论 -
POJ 2492 A Bug's Life
分析:给你多只虫子的关系,判断有没有gay,一开始初始化他们都没有对象relative[i]=0;如果a,b都没有对象,那么a的对象是b,b的对象是a;如果a有,b没有,b的对象就是a,把b加入到a的对象的集合中;b有,a没有同理;如果a,b都有对象,就把他们加入到各自的对象集中,一只虫子的第一个对象为老大,后来加进来的都要归他管。# include int flag,root[2005原创 2015-07-13 20:42:58 · 555 阅读 · 0 评论 -
POJ 2663 Tri Tiling
分析:当n为奇数时,肯定是不能铺满的,当n为偶数时,可以用递推得出,过程很有意思,可以自己想想。# include int main() { int i,n,a[35],s[35]; a[0]=1;s[0]=1; for(i=1;i<=15;i++) { a[i]=2*s[i-1]+a[i-1];原创 2015-07-14 20:34:35 · 737 阅读 · 0 评论 -
POJ 1166 The Clocks
分析:已知9种操作,每种操作都会影响几个时钟,现给你9个时钟的初始状态,让你求出最少的操作方案使这9个时钟都调整为12点。根据已知的9种操作写出一个二维矩阵a[9][9],第j列表示第(j+1)种操作,第i行表示影响第(i+1)个时钟,如果第j种操作对第i个时钟有影响,a[j-1][i-1]=1,否则为0。设最小的调整方案为第1个时钟到第9个时钟分别调整ans[0]到ans[8]次,那么(9*9)原创 2015-07-16 20:29:54 · 573 阅读 · 0 评论 -
POJ 3984 迷宫问题
分析:简单的BFS# include struct node { int x,y,pre; }q[30]; int map[10][10]; void Print(int i) { if(q[i].pre!=-1) Print(q[i].pre); printf("(%d, %d)\n",q[i].x,q[i].y); }原创 2016-03-31 20:46:19 · 426 阅读 · 0 评论