枚举之讨厌的青蛙

作者: cherryleechen | 来源:发表于2017-10-02 11:48 被阅读9次

问题描述

2017-10-01 21-05-50 创建的截图.png 2017-10-01 21-05-53 创建的截图.png 2017-10-01 21-05-59 创建的截图.png 2017-10-01 21-06-06 创建的截图.png

题目要求

2017-10-01 21-06-13 创建的截图.png

程序输入

2017-10-01 21-07-01 创建的截图.png

程序输出

2017-10-01 21-07-07 创建的截图.png

样例

2017-10-01 21-07-10 创建的截图.png

解题思路

2017-10-01 21-09-53 创建的截图.png 2017-10-01 21-10-44 创建的截图.png 2017-10-01 21-10-54 创建的截图.png 2017-10-01 21-11-18 创建的截图.png

注意

2017-10-01 21-11-29 创建的截图.png 2017-10-01 21-17-06 创建的截图.png 2017-10-01 21-13-58 创建的截图.png

程序实现

#include<iostream>
#include<algorithm>

using namespace std;

int R,C,N;//行数,列数,被踩水稻数

struct Plant{
int x;
int y;
Plant(){}
Plant(int m,int n){x=m;y=n;}
};

bool operator < (const Plant& p1,const Plant& p2){
if(p1.x==p2.x) return p1.y<p1.y;
return p1.x<p2.x;
}

int main(){
cin>>R>>C;//输入行数和列数,x方向是上下,y方向是左右
cin>>N;
int i,j,dX,dY,pX,pY,maxs=2,steps;
Plant plant[N];
for(i=0;i<N;i++)
    cin>>plant[i].x>>plant[i].y;
sort(plant,plant+N);//将plant按x坐标从小到大排序,x坐标相同的按y坐标从小到大排序
for(i=0;i<N-2;i++)//plant[i]是第一个点
    for(j=i+1;j<N-1;j++)//plant[j]是第二个点
        {
        dX=plant[j].x-plant[i].x;
        dY=plant[j].y-plant[i].y;
        pX=plant[i].x-dX;
        pY=plant[i].y-dY;
        if(pX<=R and pX>=1 and pY<=C and pY>=1)
            continue;//第一点的前一点在田里,说明第二点选择不合理,导致步长太小
        if(plant[i].x+(maxs-1)*dX>R)
            break;//最小步长下,x方向过早越界,说明第一点不合理
        if(plant[i].y+(maxs-1)*dY>C or plant[i].y+(maxs-1)*dY<1)
            continue;//y方向过早越界,第二点选择不合理

        steps=3;
        while(pX+dX*steps<=R and pX+dX*steps>=1 and pY+dY*steps<=C and pY+dY*steps>=1){
        //看看从这两点出发一共能走多少步
        Plant tmpPlant(pX+dX*steps,pY+dY*steps);
        if(binary_search(plant+j+1,plant+N,tmpPlant)) steps++;
        else {//每一步都必须在田里,否则就不是一条合理路径
        steps=0;break;}
        }
        if(maxs<steps-1) maxs=steps-1;
        }

if(maxs==2) cout<<0<<endl;
else cout<<maxs<<endl;
return 0;
}

运行结果

2017-10-01 23-20-12 创建的截图.png

小结

2017-10-01 21-24-03 创建的截图.png

相关文章

  • 枚举之讨厌的青蛙

    问题描述 题目要求 程序输入 程序输出 样例 解题思路 注意 程序实现 运行结果 小结

  • 001-枚举问题---讨厌的青蛙

    问题描述: 。 在韩国, 有一种青蛙 。 每到晚上,这种青蛙会跳跃稻田,从而踩踏稻子 。 农民早上看到被踩踏的...

  • Swift 2 学习笔记 10.枚举

    课程来自慕课网liuyubobobo老师 枚举 枚举基础 枚举之原始值 枚举之关联值 枚举递归

  • 讨厌青蛙

    困意是一只扰人的小野兽 孕育在一川蛙鸣中 用溽暑滤去心底的残烟 而她 昏沉着双眼 思念着一些无关紧要的痛楚 咀嚼 ...

  • Swift 5.x 递归 enum

    递归枚举是拥有另一个枚举作为枚举成员关联值的枚举.当编译器操作递归枚举时必须插入间接寻址层.你可以在声明枚举成员之...

  • 【转】JavaScript遍历、枚举、迭代

    原文链接:JavaScript骚操作之遍历、枚举与迭代(上篇)JavaScript骚操作之遍历、枚举与迭代(下篇)...

  • 0031-讨厌的青蛙

    问题描述 在韩国,有一种小的青蛙。每到晚上,这种青蛙会跳越稻田,从而踩踏稻子。农民在早上看到被踩踏的稻子,希望找到...

  • java基础系列之枚举<三>

    在java基础系列之枚举<二>中进一步将枚举分类/分组实现枚举的枚举,则需要将其代码进一步修改,以达到如下要求:在...

  • Android 尽量避免使用Enum

    Android之使用枚举利弊及替代方案 知识点: 概述 为什么要使用枚举? 使用 Enum 的缺点 解决方案 总结...

  • javaSE之枚举

    枚举:其实就是一种特殊的类,一般用于表示多种固定的状态.格式: 枚举类特点:1.枚举类很安全,不能被实例化对象,甚...

网友评论

    本文标题:枚举之讨厌的青蛙

    本文链接:https://www.haomeiwen.com/subject/tngzextx.html