zoukankan      html  css  js  c++  java
  • 成长轨迹55 【ACM算法之路 百炼poj.grids.cn】【枚举】【2812:恼人的青蛙】

    题目http://poj.grids.cn/practice/2812

    打错字母的伤不起啊。。。
    【wa代码】

     1 #include <stdio.h>
    2 #include <string.h>
    3 #include <stdlib.h>
    4 int r,c,n;
    5 struct point
    6 {
    7 int x;
    8 int y;
    9 }plants[5050];
    10
    11 int cmp(const void *a,const void *b)
    12 {
    13 point * a1=(struct point*)a;
    14 point * b1=(struct point*)b;
    15 if(a1->x==b1->x)
    16 return (a1->y - b1->y);
    17 else
    18 return (a1->x - b1->x);
    19 }
    20
    21 int deal(point p,int dx,int dy)
    22 {
    23 point temp;
    24 temp.x=p.x+dx;
    25 temp.y=p.y+dy;
    26 int step=2;
    27
    28 //之前下面思路错了
    29 //如果在地图中找不到明明在地图中应该出现的点
    30 //那么就不是符合要求路径了,那就不应该有长度
    31 while(temp.x>0&&temp.x<=r&&temp.y>0&&temp.y<=c)
    32 {
    33 if(!bsearch(&temp,plants,n,sizeof(point),cmp))
    34 {
    35 step=0;
    36 break;
    37 }
    38 step++;
    39 temp.x+=dx;
    40 temp.y+=dy;
    41
    42 }
    43 //if(step==2) 这里不用做处理,反正后面出来会判断
    44 //step=0;
    45 return step;
    46 }
    47 int main()
    48 {
    49 scanf("%d %d",&r,&c);
    50 //【注意这里各个格子不是从0开始的,也不是在r-1和c-1结束】
    51 int max=2;
    52 scanf("%d",&n);
    53 for(int i=0;i<n;i++)
    54 scanf("%d %d",&plants[i].x,&plants[i].y);
    55 qsort(plants,n,sizeof(point),cmp);
    56 for(int i=0;i<n-1;i++)
    57 for(int j=i+1;j<n;j++)
    58 {
    59 int dx,dy;
    60 dx=plants[j].x-plants[i].x;
    61 dy=plants[j].y-plants[i].y;
    62 point p;
    63 p.x=plants[i].x-dx;
    64 p.y=plants[i].y-dy;
    65 if(p.x>=1&&p.x<=r&&p.y>=1&&p.y<=r)
    66 continue;
    67 p.x=plants[i].x+max*dx;
    68 p.y=plants[i].y+max*dy;
    69 if(p.x>r||p.x<=0||p.y>c||p.y<=0)
    70 continue;
    71
    72 int step=deal(plants[j],dx,dy);
    73 if(step>max)
    74 max=step;
    75 }
    76 if(max==2)
    77 max=0;
    78 printf("%d",max);
    79 return 0;
    80 }

    【ac代码】

     1 #include <stdio.h>
    2 #include <string.h>
    3 #include <stdlib.h>
    4 int r,c,n;
    5 struct point
    6 {
    7 int x;
    8 int y;
    9 }plants[5050];
    10
    11 int cmp(const void *a,const void *b)
    12 {
    13 point * a1=(struct point*)a;
    14 point * b1=(struct point*)b;
    15 if(a1->x==b1->x)
    16 return (a1->y - b1->y);
    17 else
    18 return (a1->x - b1->x);
    19 }
    20
    21 int deal(point p,int dx,int dy)
    22 {
    23 point temp;
    24 temp.x=p.x+dx;
    25 temp.y=p.y+dy;
    26 int step=2;
    27
    28 //之前下面思路错了
    29 //如果在地图中找不到明明在地图中应该出现的点
    30 //那么就不是符合要求路径了,那就不应该有长度
    31 while(temp.x>0&&temp.x<=r&&temp.y>0&&temp.y<=c)
    32 {
    33 if(!bsearch(&temp,plants,n,sizeof(point),cmp))
    34 {
    35 step=0;
    36 break;
    37 }
    38 step++;
    39 temp.x+=dx;
    40 temp.y+=dy;
    41
    42 }
    43 //if(step==2) 这里不用做处理,反正后面出来会判断
    44 //step=0;
    45 return step;
    46 }
    47 int main()
    48 {
    49 scanf("%d %d",&r,&c);
    50 //【注意这里各个格子不是从0开始的,也不是在r-1和c-1结束,而分别是1、r和c】
    51 int max=2;
    52 scanf("%d",&n);
    53 for(int i=0;i<n;i++)
    54 scanf("%d %d",&plants[i].x,&plants[i].y);
    55 qsort(plants,n,sizeof(point),cmp);
    56 for(int i=0;i<n-1;i++)
    57 for(int j=i+1;j<n;j++)
    58 {
    59 int dx,dy;
    60 dx=plants[j].x-plants[i].x;
    61 dy=plants[j].y-plants[i].y;
    62 point p;
    63 p.x=plants[i].x-dx;
    64 p.y=plants[i].y-dy;
    65 if(p.x>=1&&p.x<=r&&p.y>=1&&p.y<=c)//【这里怎么打成p.y<=r了。。】
    66 continue;
    67 p.x=plants[i].x+max*dx;
    68 p.y=plants[i].y+max*dy;
    69 if(p.x>r||p.x<=0||p.y>c||p.y<=0)
    70 continue;
    71
    72 int step=deal(plants[j],dx,dy);
    73 if(step>max)
    74 max=step;
    75 }
    76 if(max==2)
    77 max=0;
    78 printf("%d\n",max);
    79 return 0;
    80 }
  • 相关阅读:
    linux MySQL 初始化数据库
    linux 建立 MySQL 账号
    linux MySQL 安装
    Background-Size
    .net文件压缩和解压及中文文件夹名称乱码问题
    C# 浅拷贝与深拷贝区别
    移动端手势库hammerJS 2.0.4官方文档翻译
    期待已久的2012年度最佳jQuery插件揭晓
    Hammer.js
    jQuery Validate验证框架详解
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2363521.html
Copyright © 2011-2022 走看看