1068 万绿丛中一点红(JAVA)

简介: 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值。现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 8 个相邻像素的颜色差充分大。

 

对于计算机而言,颜色不过是像素点对应的一个 24 位的数值。现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 8 个相邻像素的颜色差充分大。

输入格式:

输入第一行给出三个正整数,分别是 M 和 N(≤ 1000),即图像的分辨率;以及 TOL,是所求像素点与相邻点的颜色差阈值,色差超过 TOL 的点才被考虑。随后 N 行,每行给出 M 个像素的颜色值,范围在 [0,224) 内。所有同行数字间用空格或 TAB 分开。

输出格式:

在一行中按照 (x, y): color 的格式输出所求像素点的位置以及颜色值,其中位置 xy 分别是该像素在图像矩阵中的列、行编号(从 1 开始编号)。如果这样的点不唯一,则输出 Not Unique;如果这样的点不存在,则输出 Not Exist

输入样例 1:

8 6 200
0    0    0      0      0        0        0        0
65280    65280    65280    16711479 65280    65280    65280    65280
16711479 65280    65280    65280    16711680 65280    65280    65280
65280    65280    65280    65280    65280    65280    165280   165280
65280    65280    16777015 65280    65280    165280   65480    165280
16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215

image.gif

输出样例 1:

(5, 3): 16711680

image.gif

输入样例 2:

4 5 2
0 0 0 0
0 0 3 0
0 0 0 0
0 5 0 0
0 0 0 0

image.gif

输出样例 2:

Not Unique

image.gif

输入样例 3:

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

image.gif

输出样例 3:

Not Exist

image.gif

代码实现:

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
/**
 * @author yx
 * @date 2022-07-24 2:25
 */
public class Main {
    static PrintWriter out=new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);
    public static void main(String[] args) throws IOException {
        in.nextToken();
        int M=(int) in.nval;
        in.nextToken();
        int N=(int) in.nval;
        in.nextToken();
        int tol=(int) in.nval;
        int[][] nums=new int[N][M];
        int temp=0;
        ArrayList<Integer> list=new ArrayList<>();
        ArrayList<Integer> list1=new ArrayList<>();
        ArrayList<Integer> list2=new ArrayList<>();
        HashMap<Integer,Integer> map=new HashMap<>();
        for (int i = 0; i <N ; i++) {
            for (int j = 0; j < M; j++) {
                in.nextToken();
                nums[i][j]=(int) in.nval;
                map.put(nums[i][j],map.getOrDefault(nums[i][j],0)+1);
            }
        }
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < M; j++) {
                    if(i-1>=0&&i+1<=N-1&&j-1>=0&&j+1<=M-1)
                        //这个地方注意一下,差值大于tol,有两种情况,大于tol,小于-tol
                    if (map.get(nums[i][j])==1 && (nums[i][j] - nums[i - 1][j] < -tol || nums[i][j] - nums[i - 1][j] > tol) && (nums[i][j] - nums[i + 1][j] > tol || nums[i][j] - nums[i + 1][j] < -tol)&& (nums[i][j] - nums[i][j - 1] > tol ||nums[i][j] - nums[i][j - 1] < -tol) && (nums[i][j] - nums[i][j + 1] > tol || nums[i][j] - nums[i][j + 1] < -tol) && (nums[i][j] - nums[i - 1][j - 1] > tol || nums[i][j] - nums[i - 1][j - 1] < -tol) && (nums[i][j] - nums[i + 1][j + 1] > tol || nums[i][j] - nums[i + 1][j + 1] < -tol) && (nums[i][j] - nums[i - 1][j + 1] > tol || nums[i][j] - nums[i - 1][j + 1] < -tol) && (nums[i][j] - nums[i + 1][j - 1] > tol || nums[i][j] - nums[i + 1][j - 1] < -tol)) {
//                        if (Math.abs(nums[i][j] - nums[i - 1][j]) > tol && Math.abs(nums[i][j] - nums[i + 1][j]) > tol && Math.abs(nums[i][j] - nums[i][j - 1]) > tol && Math.abs(nums[i][j] - nums[i][j + 1]) > tol && Math.abs(nums[i][j] - nums[i - 1][j - 1]) > tol && Math.abs(nums[i][j] - nums[i + 1][j + 1]) > tol && Math.abs(nums[i][j] - nums[i - 1][j + 1]) > tol && Math.abs(nums[i][j] - nums[i + 1][j - 1]) > tol) {
//                        if (map.get(nums[i][j])==1 && nums[i][j] - nums[i - 1][j] > tol && nums[i][j] - nums[i + 1][j] > tol && nums[i][j] - nums[i][j - 1] > tol && nums[i][j] - nums[i][j + 1] > tol && nums[i][j] - nums[i - 1][j - 1] > tol && nums[i][j] - nums[i + 1][j + 1] > tol && nums[i][j] - nums[i - 1][j + 1] > tol && nums[i][j] - nums[i + 1][j - 1] > tol) {
                            temp++;
                            list.add(j + 1);
                            list1.add(i + 1);
                            list2.add(nums[i][j]);
                    }
                        }
                }
            if(temp==1){
                System.out.printf("(%d, %d): %d\n",list.get(0),list1.get(0),list2.get(0));
            }else if(temp > 1){
                System.out.println("Not Unique");
            }else {
                System.out.println("Not Exist");
            }
    }
}

image.gif

相关文章
|
算法 前端开发
找出前缀异或的原始数组
找出前缀异或的原始数组
91 0
|
消息中间件 存储 缓存
Python之RabbitMQ操作
Python之RabbitMQ操作
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
631 66
|
存储 算法
【优选算法专栏】专题十六:BFS解决最短路问题---前言
【优选算法专栏】专题十六:BFS解决最短路问题---前言
253 1
|
11月前
|
机器学习/深度学习 人工智能 算法
昇腾AI行业案例(一):基于AI图像处理的疲劳驾驶检测
在本实验中,您将学习如何使用利用CV(Computer Vision)领域的AI模型来构建一个端到端的疲劳驾驶检测系统,并使用开源数据集进行效果验证。为此,我们将使用昇腾的AI硬件以及CANN等软件产品。
509 3
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
前端开发 数据安全/隐私保护 Python
Python 图文:小白也能轻松生成精美 PDF 报告!
Python 图文:小白也能轻松生成精美 PDF 报告!
781 1
|
机器学习/深度学习 人工智能 数据挖掘
探索软件测试的未来之路
随着技术的飞速发展,软件测试领域迎来了前所未有的挑战与机遇。本文将深入浅出地探讨自动化测试的最新趋势,揭示AI在测试中的革命性作用,并分享如何构建高效、智能的测试策略,以适应快速变化的技术环境。无论你是初学者还是资深专家,这篇文章都将为你提供有价值的见解和实用的建议。
|
JavaScript 前端开发
数组和字符串的相互转换
1.Array.join()方法 将数组的每一项用指定字符连接形成一个字符串。默认连接字符为 “,” 逗号。 注:将字符串转化为数组的String.split(“分隔符”)与Array.join(“分隔符”)正好相反;
|
前端开发
前端学习案例2-受控组件和非受控组件2
前端学习案例2-受控组件和非受控组件2
199 0
前端学习案例2-受控组件和非受控组件2