ovo的憨憨题解(象形文字)

发布时间:2019-12-10 20:24:52
贴主:ovo
热度:3
正在讨论:P2080 - 象形文字 题目传送门

ovo 2019-12-10

首先先提供一下题目样例,题目显示的是图片别复制了ovo(手打好累)

***** * ***** ***** *  *   ***** ***** ***** ***** *****
*   * *     *     * *  *   *     *         * *   * *   *
*   * * ***** ***** *****  ***** *****     * ***** *****
*   * * *         *    *       * *   *     * *   *     *
***** * ***** *****    *   ***** *****     * ***** *****

一、题意解释

1、输入保证为5行,字符数不超过200

2、开头数字不为0

3、除“1”占5行1列外,其他数字都占5行五列

4、空格列一定占一整列

二、做法详解

其实只要有一套辨别数字的方法都能做,这里先列举其中一种,以后有空再补qwq

1、先将5行字符串全部转化为01矩阵,以0~9图片为例,我们可以得到下面的01矩阵

11111010111110111110100100011111011111011111011111011111
10001010000010000010100100010000010000000001010001010001
10001010111110111110111110011111011111000001011111011111
10001010100000000010000100000001010001000001010001000001
11111010111110111110000100011111011111000001011111011111

2、将01矩阵以列为单位看作二进制数,再把二进制转十进制保存在f[i]里,称作特征值,我们可以得到:

31 17 17 17 31 0 31 0 29 21 21 21 23 0 21 21 21 21 31 0 7 4 4 31 4 0 0 23 21 21 21 29 0 31 21 21 21 29 0 1 1 1 1 31 0 31 21 21 21 31 0 23 21 21 21 31

3、这样一来我们就可以确定每个数字对应的5位特征值(除1特例),空格列一定为0

0 = 31 17 17 17 31

1 = 31

2 = 29 21 21 21 23

3 = 21 21 21 21 31

4 = 7 4 4 31 4

5 = 23 21 21 21 29

6 = 31 21 21 21 29

7 = 1 1 1 1 31

8 = 31 21 21 21 31

9 = 23 21 21 21 31

4、最后只要遍历一遍f[],找到非0的f[i]就可以根据它以及它的后4位判断出数字

三、要点注意

1、不要用longlong去存数,字符数不超过200意味着最多可以有100个“1”。用数组存或者直接输出

2、需要注意“1”的位置,当“1”为末尾时,后五位会超出数组,需要对“1”特殊处理

(0)

易向晚来适 2022-09-07

回复 @ovo :辛苦了

(0)

嘤嘤嘤 2019-12-11

可以很僵硬地取几列来判断是什么数字

(0)

Copyright 2016 - 2024 XUJC ACM Team
闽ICP备2020022076号-1