zoukankan      html  css  js  c++  java
  • PAT 乙级 1068 万绿丛中一点红(20 分)

    1068 万绿丛中一点红(20 分)

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

    输入格式:

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

    输出格式:

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

    注意:1.该像素一定是独一无二的

       2.本题中有一测试例输入数量很大,所以使用cin时会导致运行超时,解决方法1.加上  ios::sync_with_stdio(false);  关闭cin cout的输入输出缓冲区加快输入输出效率,2.改用scanf输入

        经测试只用cin 会超时,用scanf会过测试例,使用解决方法1更快

     1 #include<iostream>
     2 #include<cmath>
     3 #include<map>
     4 
     5 using namespace std;
     6 
     7 int pixel[1010][1010];
     8 int col, row, tol;
     9 map<int, int> m;
    10 int index[8][2] = { { -1, -1 }, { 0, -1 }, { 1, -1 }, { -1, 0 }, { 1, 0 }, { -1, 1 }, { 0, 1 }, { 1, 1 } };
    11 
    12 bool judge(int i, int j)
    13 {
    14     for (int k = 0; k < 8; ++k)
    15     {
    16         int x = index[k][0]+i, y = index[k][1]+j;
    17 
    18         if (x >= 1 && x<=row && y>=1 && y<=col && abs(pixel[i][j] - pixel[x][y]) <= tol)
    19             return false;
    20     }
    21 
    22     return true;
    23 }
    24 
    25 int main()
    26 {
    27     //关闭输入输出流的缓冲区,加快cin cout的速度
    28     ios::sync_with_stdio(false);
    29     int pointNum = 0;
    30     int x, y;
    31     cin >> col >> row >> tol;
    32 
    33     for (int i = 1; i <= row; ++i)
    34     for (int j = 1; j <= col; ++j)
    35     {
    36         cin>> pixel[i][j];
    37         ++m[pixel[i][j]];
    38     }
    39 
    40     for (int i = 1; i <= row; ++i)
    41     for (int j = 1; j <= col; ++j)
    42     {
    43         if (m[pixel[i][j]] == 1 && judge(i, j))
    44         {
    45                 ++pointNum;
    46                 x = i;
    47                 y = j;
    48 
    49                 if (pointNum == 2)//后续无须再检查,结果必定是不唯一
    50                 {
    51                     cout << "Not Unique" << endl;
    52                     return 0;
    53                 }
    54         }    
    55     }
    56 
    57     if (pointNum == 0)
    58         cout << "Not Exist" << endl;
    59     else if (pointNum == 1)
    60         cout << "(" << y << ", " << x << "): " << pixel[x][y] << endl;
    61 
    62     return 0;
    63 }
  • 相关阅读:
    cookie,sessionStorage,localStorage
    存储方式与传输方式
    为什么css放在顶部而js写在后面
    常见的web安全及防护原理
    web缓存
    http协议理解
    http与https
    get/post的区别
    JZOJ 3571. 【GDKOI2014】内存分配
    JZOJ 3570. 【GDKOI2014】壕壕的寒假作业
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/9424863.html
Copyright © 2011-2022 走看看