OpenJudge - 2812:恼人的青蛙

目录

1、题目

2、题目解读、

3、代码

1、题目

输入

从标准输入设备上读入数据。第一行上两个整数R、C,分别表示稻田中水稻的行数和列数,1≤R、C≤5000。第二行是一个整数N,表示被踩踏的水稻数量, 3≤N≤5000。在剩下的N行中,每行有两个整数,分别是一颗被踩踏水稻的行号(1~R)和列号(1~C),两个整数用一个空格隔开。而且,每棵被踩踏水稻只被列出一次。

输出

从标准输出设备上输出一个整数。如果在稻田中存在青蛙行走路径,则输出包含最多水稻的青蛙行走路径中的水稻数量,否则输出0。

样例输入

6 7
14
2 1
6 6
4 2
2 5
2 6
2 7
3 4
6 1
6 2
2 3
6 3
6 4
6 5
6 7 

样例输出

7

2、题目解读

因为要求出最长的路径,所有需要比较全部的路径长度。对于每一条路径,因为步长相等,所有只要确定开始两个被踩的的点就可以求出整条路径。假设前两个点为(x₁,y₁),(x₂,y₂),则步长为dx=x₂-x₁,dy=y₂-y₁,需要判断下面三个条件是否都满足。

(1)、之后每个点(xᵢ,yᵢ)=(xᵢ₋₁+dx,yᵢ₋₁+dy)=(x₂+(i-2)*dx,y₂+(i-2)*dy),需要依次判断各个点是否被踩过。

(2)、(x₁-dx,y₁-dy)需要在稻田之外,因为这样才能保证这个(x₁,y₁)这个点是这条最长直线的第一个点,或者是这样才能保证这可能是最长的一条直线。

(3)、将路径上的最后一颗水稻记作(xⱼ,yⱼ),则(xⱼ+dx,yⱼ+dy)需要在稻田之外。这才能保证最后一个点为稻田的边界。

boolean[][] flag:用来判断是否被青蛙踩过,true表示被踩过,false表示未被踩过

Point[] p:用来记录稻田被踩的点的坐标

题目还要求每条青蛙的行走路径上面至少有三个被踩的点(水稻)否则输出0.

然后就是进行编码,来一一枚举各条直线是否为最长的被踩的直线。

3、代码

import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;public class 恼人的青蛙 {public static int MAX=5010;//水稻长宽最长为5000public static int r,c,n,ans=0;public static boolean[][] flag=new boolean[MAX][MAX];//用来判断是否被青蛙踩过,true表示被踩过,false表示未被踩过public static Point[] p;//用来记录稻田被踩的点的坐标static boolean Outside(int x1,int y1){//判断是否在农田外true表示在稻田外,false表示在稻田内return x1 <= 0 || y1 <= 0 || x1 > r || y1 > c;}//判断以a和b为起点的路径是否存在static boolean count(int a,int b){int dx=p[b].x-p[a].x;//计算dxint dy=p[b].y-p[a].y;//计算dy//优化条件一:如果不能从稻田外跳到a点,则直接退出if (!Outside(p[a].x-dx,p[a].y-dy))return false;//优化条件二:如果青蛙经过MAXSTEPS-1步就会跳出去,那么直接退出if (p[a].x+ans*dx<=0||p[a].x+ans*dx>r) return false;if (p[a].y+ans*dy<=0||p[a].y+ans*dy>c) return false;int k=2;int x1=p[b].x+dx;int y1=p[b].y+dy;//按照步长将路延伸,并且判断是否被踩而且没有超出稻田的范围while (!Outside(x1,y1)&&flag[x1][y1]){k++;x1+=dx;y1+=dy;}//判断是否可以跳出,因为最后一个点应该在稻田外面if (Outside(x1,y1)&&k>ans)ans=k;return true;}public static void main(String[] args) throws IOException {BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String[] input1=bf.readLine().split(" ");r=Integer.parseInt(input1[0]);c=Integer.parseInt(input1[1]);n=Integer.parseInt(bf.readLine().trim());//加trim 是因为输入时后面会带一个空格,否则无法转换成整数p=new Point[n];//n行输入,表示n个被青蛙踩踏的点for (int i=0;i<n;i++){String[] input2=bf.readLine().split(" ");p[i]=new Point();p[i].x=Integer.parseInt(input2[0]);p[i].y=Integer.parseInt(input2[1]);flag[p[i].x][p[i].y]=true;}//重写sort排序,先比较点的x,再比较yArrays.sort(p, new Comparator<Point>() {@Overridepublic int compare(Point o1, Point o2) {if (o1.x==o2.x)return o1.y-o2.y;elsereturn o1.x-o2.x;}});//或者使用lambda表达式来重写比较方法/*Arrays.sort(p, (o1, o2) -> {if (o1.x==o2.x)return o1.y-o2.y;elsereturn o1.x-o2.x;});*///枚举所有点,一一进行判断for (int i=0;i<n;i++)for (int j=i+1;j<n;j++){count(i,j);}if (ans<3)ans=0;System.out.println(ans);}
}

刷题之恼人的青蛙java(百练2812)相关推荐

  1. 【牛客网刷题】中秋节前开启java专项练习错题总结第一天

    [牛客网刷题]中秋节前开启java专项练习错题总结第一天 概述 写在前面 错题分析 值得记录的错题 总结 写在最后 概述 还有十几天就到中秋节了,从此又老了一岁,也多了一年的知识积累.对于这样一个特殊 ...

  2. 刷题、面试必备网站(java)

    https://blog.csdn.net/qq_39597203/article/details/87040973 整理的一些刷题面试的网站,做一个汇总,分久必合 一. 思维训练 逻辑思维训练500 ...

  3. 编程刷题平台Codewars初体验-Java

    点此欢迎光临我的个人网站[一几文星球] 最近发现了一个很多网友都在推荐的编程刷题平台Codewars,作为一个对啥都好奇(啥都学不深 )的编程菜鸟,我二话不说直接开始注册体验. 网站一进,嘿,全英文, ...

  4. 2023基于微信小程序的刷题考试系统(springboot+mysql)-JAVA.VUE(论文+开题报告+运行)

    摘 要 随着科技和网络的进步,计算机技术与网络.生活贴和的更加紧密.需要依靠客户端的单机系统逐渐被淘汰,利用互联网可以处理大量数据的新型系统如雨后春笋般迅速发展起来.这类系统和信息化时代的同步发展对传 ...

  5. 2018/12/05 PAT刷题 L1-018 大笨钟 Java

    花了很大的力气把题目从Scanner的输入方式改成BufferedReader和InputStreamReader的方式, 想法其实是很简单的, 就是执行的过程中, 不仔细, 导致有1个测试点一直过不 ...

  6. 【leetcode刷题】36.提莫攻击——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 我建议加上攻速,攻击力,生命回复速率,护甲,魔抗,血量,计算在攻击频率下提莫几秒弄死艾希 --leetcode此题热评 前言 哈喽 ...

  7. [LeetCode刷题] 2611. 老鼠和奶酪--Java实现

    ##  题目链接 2611. 老鼠和奶酪 - 力扣(LeetCode) ##  题目描述 有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉. 下标为 i 处的奶酪被吃掉的得分为: ...

  8. 【leetcode刷题】16.环形链表——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 使用快慢指针,若指针相遇则判断有环 --leetcode此题热评 前言 哈喽,大家好,我是一条. 糊涂算法,难得糊涂 Questi ...

  9. 刷题记录7.20 青蛙们跳台阶

    剑指 Offer 46. 把数字翻译成字符串. 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如 ...

最新文章

  1. linux下vmware tools工具共享
  2. 监控利器Prometheus初探
  3. Visual Studio 添加.props属性表文件,以intel.realsense.props为例(附手动配置方法)
  4. scrapy 解析css,Scrapy基础(六)————Scrapy爬取伯乐在线一通过css和xpath解析文章字段...
  5. c# 多线程界面卡顿_优化electron客户端卡顿的几种方案
  6. poj 3280 区间dp
  7. [转载] python数字类型(一)
  8. CSS + DIV 让页脚始终保持在页面底部
  9. 注解定时器_细数那些使用过的定时器
  10. 关于微信拼车小程序开发的需求分析(需求获取)
  11. Window XP驱动开发(十一) USB2.0 芯片CY7C68013A+FPGA实现的高速传输系统设计(软件及硬件)
  12. 北京邮电大学计算机论文,2019北京邮电大学本科毕业论文-randomwalk.doc
  13. 计算机连接拒绝访问,打印机拒绝访问,教您打印机拒绝访问怎么解决
  14. IAU SOFA 软件包介绍
  15. win10无法使用内置管理员账户打开
  16. 新美大 java待遇_入我新美大的Java后台开发面试题总结
  17. 最新数据,国内5G手机出货量已超78万部!
  18. autoconf与automake使用简解
  19. ECharts修改坐标轴,坐标轴字体,坐标轴网格样式以及控制坐标轴是否显示
  20. Vue2基础、组件化编程、脚手架、Vuex、Vue路由、UI组件库

热门文章

  1. tensorflow实现inception V3
  2. Linux驱动学习之:WDT(watchdog)驱动
  3. Mirco Python :在 BPIBIT 上用HC-SR501
  4. hive 补0_Hive常见语句及函数
  5. 大数据(5a)HBase入门:安装、读写、架构、数据视图、数据模型
  6. ROS-基于简单势场算法编写的线型编队领航
  7. Pr 入门教程如何改变帧速率和音频通道?
  8. 基于matlab的风力发电系统仿真研究,基于MATLAB的风力发电系统仿真研究
  9. 关于CocoaPods私有库的那点事情
  10. java 图片压缩加水印_java图片添加水印和压缩