成长轨迹55 【ACM算法之路 百炼poj.grids.cn】【简单枚举】【2812:恼人的青蛙】
2012-02-22 17:42
507 查看
题目http://poj.grids.cn/practice/2812
打错字母的伤不起啊。。。
【wa代码】
【ac代码】
打错字母的伤不起啊。。。
【wa代码】
#include <stdio.h> #include <string.h> #include <stdlib.h> int r,c,n; struct point { int x; int y; }plants[5050]; int cmp(const void *a,const void *b) { point * a1=(struct point*)a; point * b1=(struct point*)b; if(a1->x==b1->x) return (a1->y - b1->y); else return (a1->x - b1->x); } int deal(point p,int dx,int dy) { point temp; temp.x=p.x+dx; temp.y=p.y+dy; int step=2; //之前下面思路错了 //如果在地图中找不到明明在地图中应该出现的点 //那么就不是符合要求路径了,那就不应该有长度 while(temp.x>0&&temp.x<=r&&temp.y>0&&temp.y<=c) { if(!bsearch(&temp,plants,n,sizeof(point),cmp)) { step=0; break; } step++; temp.x+=dx; temp.y+=dy; } //if(step==2) 这里不用做处理,反正后面出来会判断 //step=0; return step; } int main() { scanf("%d %d",&r,&c); //【注意这里各个格子不是从0开始的,也不是在r-1和c-1结束】 int max=2; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d %d",&plants[i].x,&plants[i].y); qsort(plants,n,sizeof(point),cmp); for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { int dx,dy; dx=plants[j].x-plants[i].x; dy=plants[j].y-plants[i].y; point p; p.x=plants[i].x-dx; p.y=plants[i].y-dy; if(p.x>=1&&p.x<=r&&p.y>=1&&p.y<=r) continue; p.x=plants[i].x+max*dx; p.y=plants[i].y+max*dy; if(p.x>r||p.x<=0||p.y>c||p.y<=0) continue; int step=deal(plants[j],dx,dy); if(step>max) max=step; } if(max==2) max=0; printf("%d",max); return 0; }
【ac代码】
#include <stdio.h> #include <string.h> #include <stdlib.h> int r,c,n; struct point { int x; int y; }plants[5050]; int cmp(const void *a,const void *b) { point * a1=(struct point*)a; point * b1=(struct point*)b; if(a1->x==b1->x) return (a1->y - b1->y); else return (a1->x - b1->x); } int deal(point p,int dx,int dy) { point temp; temp.x=p.x+dx; temp.y=p.y+dy; int step=2; //之前下面思路错了 //如果在地图中找不到明明在地图中应该出现的点 //那么就不是符合要求路径了,那就不应该有长度 while(temp.x>0&&temp.x<=r&&temp.y>0&&temp.y<=c) { if(!bsearch(&temp,plants,n,sizeof(point),cmp)) { step=0; break; } step++; temp.x+=dx; temp.y+=dy; } //if(step==2) 这里不用做处理,反正后面出来会判断 //step=0; return step; } int main() { scanf("%d %d",&r,&c); //【注意这里各个格子不是从0开始的,也不是在r-1和c-1结束,而分别是1、r和c】 int max=2; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d %d",&plants[i].x,&plants[i].y); qsort(plants,n,sizeof(point),cmp); for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { int dx,dy; dx=plants[j].x-plants[i].x; dy=plants[j].y-plants[i].y; point p; p.x=plants[i].x-dx; p.y=plants[i].y-dy; if(p.x>=1&&p.x<=r&&p.y>=1&&p.y<=c)//【这里怎么打成p.y<=r了。。】 continue; p.x=plants[i].x+max*dx; p.y=plants[i].y+max*dy; if(p.x>r||p.x<=0||p.y>c||p.y<=0) continue; int step=deal(plants[j],dx,dy); if(step>max) max=step; } if(max==2) max=0; printf("%d\n",max); return 0; }
相关文章推荐
- 成长轨迹56 【ACM算法之路 百炼poj.grids.cn】【简单枚举】【2811:熄灯问题】
- 成长轨迹53 【ACM算法之路 百炼poj.grids.cn】【简单枚举】【2747、2810、2692、2977】
- 成长轨迹54 【ACM算法之路 百炼poj.grids.cn】【简单枚举】【2739:计算对数】
- 成长轨迹59 【ACM算法之路 百炼poj.grids.cn】【递归】【2694:逆波兰表达式】
- 成长轨迹60 【ACM算法之路 百炼poj.grids.cn】【递归】【2756:二叉树】
- 成长轨迹61 【ACM算法之路 百炼poj.grids.cn】【动态规划】【2806、1661、2757】
- 成长轨迹43 【ACM算法之路 百炼poj.grids.cn】【数值转换】【2765:八进制小数】
- 成长轨迹47 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2820:古代密码】
- 成长轨迹48 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2818:密码】
- 成长轨迹49 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2819:W的密码】
- 成长轨迹57 【ACM算法之路 百炼poj.grids.cn】【递归】【2754、2816、2753、】
- 成长轨迹44 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2799、2976、2975、2742】
- 成长轨迹58 【ACM算法之路 百炼poj.grids.cn】【递归】【1664:放苹果】
- 成长轨迹45 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2797:最短前缀】
- 成长轨迹46 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2804:词典】
- 成长轨迹50 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2974:487-3279】
- 成长轨迹42 【ACM算法之路 百炼poj.grids.cn】【数值转换】【2972、2798、2735、2734、2973】
- 成长轨迹51 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2744:子串】
- 成长轨迹52 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2743:字符串判等】
- 2812:恼人的青蛙