AcWing 1874. 哞加密

许多人都不知道,奶牛很喜欢拼图,特别是单词拼图。

农夫约翰的奶牛最近发明了一个有趣的“单词查找器”拼图。

这种拼图的一个例子是:

USOPEN
OOMABO
MOOMXO
PQMROM

作为奶牛,它们唯一感兴趣的单词是 MOO,它可以在拼图中多次沿水平、垂直、45度斜线或135度斜线出现。

上例中,MOO 一共出现了 66 次。

农夫约翰也是个拼图迷,由于奶牛们不希望他在它们之前解决“单词查找器”拼图,因此它们使用”替换密码“对内容进行了加密。

该“替换密码”用不同的字母替换了字母表中的每个字母。

例如,AA 可以映射到 XX,BB 可以映射到 AA,依此类推。

没有字母映射到自身,也没有两个字母映射到同一个字母(否则解将是不明确的)。

不幸的是,奶牛忘记了替换密码的具体加密方式。

请帮助它们确定如果使用适当的替换密码解密,谜题中可能存在的最大 MOO 数。

输入格式

第一行包含 N,MN,M,表示拼图的尺寸为 NN 行 MM 列。

接下来 NN 行,每行包含 MM 个大写字母,形容加密后的拼图。

输出格式

输出如果使用适当的替换密码解密,谜题中可能存在的最大 MOO 数。

数据范围

1≤N,M≤501≤N,M≤50

输入样例:

4 6
TAMHGI
MMQVWM
QMMQSM
HBQUMQ

输出样例:

6

样例解释

在此样例中,MM 和 OO 分别被替换为了 QQ 和 MM。

以此解密最多可存在 66 个 MOO

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;

int main()
{
    string g[55];
    int m, n;
    cin >> m >> n;
    for(int i = 0; i < m; i ++ ) cin >> g[i];
    
    
    int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
    int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};

    unordered_map<string, int> hash;
    for(int i = 0; i < m; i ++ )
        for(int j = 0; j < n; j ++ )
            for(int k = 0; k < 8; k ++ )
            {
                int x = i, y = j;
                string s(1, g[x][y]);
                
                bool flag = true;
                for(int u = 0; u < 2; u ++ )
                {
                    x += dx[k];
                    y += dy[k];
                    if(x < 0 || x >= m || y < 0 || y >= n){
                        flag = false;
                        break;
                    }
                    s += g[x][y];
                }
                
                if(flag && s[0] != s[1] && s[1] == s[2] && s[0] != 'M' && s[1] != 'O')
                    hash[s] ++ ;
            }
    int ans = 0;
    for(auto& [k, v]: hash) ans = max(ans, v);
    cout << ans;
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值