1. 题目

    夜空深处,闪亮的星星以星群的形式出现在人们眼中,形态万千。

    一个星群是指一组非空的在水平,垂直或对角线方向相邻的星星的集合。

    一个星群不能是一个更大星群的一部分。

    星群可能是相似的。

    如果两个星群的形状、包含星星的数目相同,那么无论它们的朝向如何,都认为它们是相似的。

    通常星群可能有 8 种朝向,如下图所示:

    现在,我们用一个二维 01 矩阵来表示夜空,如果一个位置上的数字是 1,那么说明这个位置上有一个星星,否则这个位置上的数字应该是 0。

    给定一个夜空二维矩阵,请你将其中的所有星群用小写字母进行标记,标记时相似星群用同一字母,不相似星群用不同字母。

    标注星群就是指将星群中所有的 11 替换为小写字母。

  2. 输入格式

    第一行包含一个整数 W,表示矩阵宽度。

    第二行包含一个整数 H,表示矩阵高度。

    接下来 H 行,每行包含一个长度为 W 的 01 序列,用来描述整个夜空矩阵。

  3. 输出格式

    输出标记完所有星群后的二维矩阵。

    用小写字母标记星群的方法很多,我们将整个输出读取为一个字符串,能够使得这个字符串字典序最小的标记方式,就是我们想要的标记方式。

    输出这个标记方式标出的最终二维矩阵。

  4. 数据范围

    0≤W,H≤100
    0≤ 星群数量 ≤500,
    0≤ 不相似星群数量 ≤26,
    1≤ 星群中星星的数量 ≤160

  5. 输入样例

    23
    15
    10001000000000010000000
    01111100011111000101101
    01000000010001000111111
    00000000010101000101111
    00000111010001000000000
    00001001011111000000000
    10000001000000000000000
    00101000000111110010000
    00001000000100010011111
    00000001110101010100010
    00000100110100010000000
    00010001110111110000000
    00100001110000000100000
    00001000100001000100101
    00000001110001000111000
    
  6. 输出样例

    a000a0000000000b0000000
    0aaaaa000ccccc000d0dd0d
    0a0000000c000c000dddddd
    000000000c0b0c000d0dddd
    00000eee0c000c000000000
    0000e00e0ccccc000000000
    b000000e000000000000000
    00b0f000000ccccc00a0000
    0000f000000c000c00aaaaa
    0000000ddd0c0b0c0a000a0
    00000b00dd0c000c0000000
    000g000ddd0ccccc0000000
    00g0000ddd0000000e00000
    0000b000d0000f000e00e0b
    0000000ddd000f000eee000
    
  7. 样例解释
    样例对应的星空图如下:

    答案对应的标记后星空图如下:

  8. 代码1

    import java.util.*;
    import java.io.*;public class Main {static List<Double> hash = new ArrayList<>();static List<int[]> q = new ArrayList<>();static int col;static int row;static char[][] g;public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 指定星图的行和列col = sc.nextInt();row = sc.nextInt();// 用g存储整个星图g = new char[row][col];for(int i = 0; i < row; i++) {String str = sc.next();g[i] = str.toCharArray();}for(int i = 0; i < row; i++) {for(int j = 0; j < col; j++) {// 如果当前坐标是星星if(g[i][j] == '1') {q.clear();dfs(i, j);// 获取星图的hash值double val = get_hash();// 不同hash值映射为字符char c = get_char(val);for(int[] k: q) {int a = k[0];int b = k[1];g[a][b] = c;}}}}for(int i = 0; i < row; i++) {System.out.println(g[i]);}}// 遍历坐标[x, y], 将其相接触(8个方向)的星云存储在同一个列表中public static void dfs(int x, int y) {q.add(new int[]{x, y});g[x][y] = '0';// 这里就是相邻的8个表格for(int i = x - 1; i <= x + 1; i++) {for(int j = y - 1; j <= y + 1; j++) {if(i >= 0 && i < row && j >= 0 && j <col &&g[i][j] == '1') {dfs(i, j);}}}}// 计算星图的hash值// 用星图中任意两个坐标之间的距离之和来表示该星图的hash值// 虽然也存在不同图形有相同hash值的情况, 但是概率很低很低, 可以忽略public static double get_hash() {double res = 0;for(int i = 0; i < q.size(); i++) {for(int j = 0; j < q.size(); j++) {res += get_dist(q.get(i), q.get(j));}}return res;}// 不同hash值映射为字符public static char get_char(double val) {for(int i = 0; i < hash.size(); i++) {// 如果当前hash值和列表中的元素值相差很小(1e-6)// 则直接返回该元素对应的字符if(Math.abs(val - hash.get(i)) < 1e-6) {return (char)((i) + 'a');}}// 如果没有, 则添加到列表中, 并返回对应的字符hash.add(val);return (char)((hash.size() - 1) + 'a');}// 计算两点间的距离public static double get_dist(int[] a, int[] b) {return Math.sqrt((a[0] -b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]));}
    }
    

AcWing1402. 星空之夜相关推荐

  1. AcWing 1402. 星空之夜 1月28

    AcWing 1402. 星空之夜 1月28 题意: 一个星群是指一组非空的在水平,垂直或对角线方向相邻的星星的集合. 一个星群不能是一个更大星群的一部分. 星群可能是相似的. 如果两个星群的形状.包 ...

  2. 寒假每日一题(提高组)【Week 1 完结】

    目录 1402. 星空之夜[dfs + 哈希] 479. 加分二叉树[DP] 1414. 牛异或[trie] 1402. 星空之夜[dfs + 哈希] https://www.acwing.com/p ...

  3. 华为让爱成双活动,缤纷好礼回馈消费者

    2月2日,华为举办的"让爱成双"活动,不仅在服务APP推出互动小游戏.抖音平台小视频等众多新玩法.同时,华为商城和各大电商平台华为旗舰店还带来多重超值福利活动.即便消费者足不出户, ...

  4. html爱情表白神器,回忆纪念册(附源码)

    文章目录 1.设计来源 1.1 主界面 1.2 相关界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/wei ...

  5. 2.14调情方案之个性情人节

    他们说:"情人的眼里容不下沙子." 我们说:"情人的眼里只有彼此." 在2.14这样的日子,放下平日的矜持与羞涩,放松自己的心灵与肌体,来吧,和你的情人调调情, ...

  6. “机器人之夜”看猎豹跑得快还是五款机器人价格降得快?“鸿门宴”正式上演

    来源:机器人大讲堂 3 月 21 日,猎豹移动(NYSE: CMCM)联合旗下人工智能公司猎户星空在北京水立方举行"猎豹3.21机器人之夜"发布会,发布自主研发的猎户机器人平台Or ...

  7. 用python画梵高星空-python 梵高

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 对于一个视频来说,只需要将每一帧都转换后输出,并按照一定的时间间隔清屏. ...

  8. 千灯照碧云,越夜越星沙

    (题图摄影:邓建辉) 文 | 弘乐.陈曦 来源 | 螳螂财经(ID:TanglangFin) "晚上去红记吃小龙虾啊!"准备下班的李强拿着电话呼朋唤友.和他一起下楼的同事伍娟听到了 ...

  9. matlab模拟三体运动_从灯泡到超级计算机,如何模拟浩瀚星空?| 赛先生

    天文学家中有这样一群人,他们既不观星,也不刷公式,而是通过模拟来研究浩瀚星空.在星团.星系这样的恒星系统中,往往包含着上百万颗恒星,规模如此惊人的恒星系统该如何处理?本期"赛先生天文&quo ...

  10. 4月24日云栖精选夜读 | 阿里云POLARDB如何助力轻松筹打造5亿用户信赖的大病筹款平台?...

    [点击订阅云栖夜读周刊] 轻松筹首创了"大病救助"模式,帮助了众多病患在第一时间解決了医疗资金等问题,为了从源头解决了医疗资金问题.而在轻松筹这样全球5.5亿用户信赖的大病筹款平台 ...

最新文章

  1. (亲试有效)如何完美更换WordPress网站的域名
  2. 前端学习(1900)vue之电商管理系统电商系统之渲染添加用户的表单自定义邮箱的规则
  3. Oracle数据库报错【ORA-12514 】TNS 监听程序当前无法识别连接描述符中请求服务
  4. 对中小电商卖家来说,找1-2个靠谱的供应链,不需要多
  5. effective_transformer
  6. Android aidl Binder框架浅析
  7. Python机器登陆新浪微博代码示例
  8. 委托作为参数传递时,可以直接传入方法名称
  9. 电子计算机属于哪个税目,高拍仪,摄像头等 税收分类编码是什么?具体选择哪一个计算机外部设备?...
  10. csdn资源下载不了问题解决 360浏览器下载不了csdn资源问题解决
  11. 写论文时优雅的在word中添加程序代码
  12. Ubuntu中vim脚本保存失败,E45错误提示。
  13. lstm不收敛_LSTM学习笔记
  14. 2023华为软件精英挑战赛——全赛段思路分享与总结
  15. iOS - 个人中心果冻弹性下拉动画
  16. php中baseasset,放映员资料库 ~ 影院之家 | The projectionist database - CineAsset 5.2.11 for Win 下载...
  17. i5 i7 Oracle,Intel Core i5/i7哪款最适合你?Intel Core i5/i7处理器简略对比评测
  18. 网络安全运营中心的3个主要要素
  19. 在使用angular打包项目的时候 打包老是出错 内存溢出的解决办法
  20. 复旦大学王思远:基于事实的自动问题生成研究

热门文章

  1. 智慧工地农民工实名制管理系统
  2. 电脑三种方式连接打印机
  3. 显著性水平 P值 概念解释
  4. logstash全量导入es
  5. linux终端下打开pdf文件,如何从终端打开PDF文件?
  6. 树莓派安装HackRF、LimeSDR、GNU Radio、Gqrx
  7. matlab c盘空间,手动清理C盘空间
  8. CCD实际尺寸对照表
  9. php apache mpm,Apache的三种MPM模式比较:prefork,worker,event
  10. 洛伦兹吸引子 matlab,使用Matplotlib画洛伦兹吸引子 | 学步园