• PTA 乙级 1068 万绿丛中一点红 (20分) C++


     本题的输入不要用cin,要用scanf,否则会有测试点4的超时

    思路:利用map来存储每个像素点出现的次数,judge函数判断与周围八个像素点的色差阈值是否超过TOL,输入时让每个像素点的出现次数做累加,方便之后判断本像素点是否是只出现过一次的(输入样式1中,16711479超过了色差阈值,但是有两个16711479,不符合),对每个像素点进行遍历,如果只出现过一次且与周围八个点的色差超过TOL,则flag++(独一无二的像素点),若只有一个这样的像素点(falg == 1),则输出他的(x,y)(编号从1开始算起),若没有这样的像素点(flag == 0),则输出 Not Exist,若有超过1个这样的像素点(flag >= 2),则输出Not Unique

     1 #include<iostream>
     2 #include<map>
     3 
     4 using namespace std;
     5 
     6 /*所有像素点*/
     7 int px[1002][1002] = { 0 };                            
     8 
     9 int judge(int i, int j, int tol) {                    //八个位置的判断
    10     if ((abs(px[i][j] - px[i][j + 1]) > tol) &&
    11         (abs(px[i][j] - px[i][j - 1]) > tol) &&
    12         (abs(px[i][j] - px[i + 1][j]) > tol) &&
    13         (abs(px[i][j] - px[i - 1][j]) > tol) &&
    14         (abs(px[i][j] - px[i - 1][j - 1]) > tol) &&
    15         (abs(px[i][j] - px[i - 1][j + 1]) > tol) &&
    16         (abs(px[i][j] - px[i + 1][j - 1]) > tol) &&
    17         (abs(px[i][j] - px[i + 1][j + 1]) > tol))
    18         return 1;
    19     return 0;
    20 }
    21 
    22 int main() {
    23     int n = 0, m = 0, tol = 0;
    24     /*输出标志位*/
    25     int flag = 0;
    26     map<int, int> unique;                //map<key,值>来存储每个像素点的出现次数
    27     /*行,列*/
    28     int h = 0, l = 0;
    29     scanf("%d %d %d", &m, &n, &tol);
    30     for (int i = 1; i <= n; ++i)
    31         for (int j = 1; j <= m; ++j) {
    32             scanf("%d", &px[i][j]);
    33             unique[px[i][j]]++;            //像素点出现次数累加
    34         }
    35     for (int i = 1; i <= n; ++i) {
    36         for (int j = 1; j <= m; ++j) {
    37             if (unique[px[i][j]] == 1 && judge(i, j, tol)) {        //像素点只出现过一次,且超过色差范围
    38                 flag++;
    39                 h = i;
    40                 l = j;
    41             }
    42         }
    43     }
    44     if (flag == 1)      printf("(%d, %d): %d", l, h, px[h][l]);
    45     else if (flag == 0) cout << "Not Exist";
    46     else                cout << "Not Unique";
    47     return 0;
    48 }

  • 相关阅读:
    MyBatis入门案例
    springboot mybatis 后台框架平台 集成代码生成器 shiro 权限
    原谅这世界没那么美好
    十万的License只取决于一个连接
    Qt连接数据库的两种方法
    桃李春风一杯酒 江湖夜雨十年灯
    ERROR:Can't connect to local MySQL server through socket可能出现的情况
    MySQL忽略授权表方式<--skip-grant-tables>重置管理用户密码
    MySQL5.7和5.6初始化数据的区别
    Rsync同步过程中遇到的常见问题
  • 原文地址:https://www.cnblogs.com/SCP-514/p/13625802.html
Copyright © 2020-2023  润新知