当前位置: 首页 > 知识库问答 >
问题:

快速键入编码挑战

谷梁凌
2023-03-14

这个问题要求在键盘上键入字符串所需的总时间,用一个手指表示为二维字符矩阵。

输入:

2 31 
YLrJpXOygVUl6MqBIRFWuAKsH7Gw4Z8
kE0tTQdP1CcxSjamizon9e5NfvDbh32
YE0
  • 第一行包含n和m作为输入,表示键盘矩阵的维数
  • 接下来的n行包含m个字符,每个字符表示键盘中的字符
  • 下一行将包含字符串S

输出:

3

说明:手指最初位于键盘的第一个符号,因此按下该键所需的时间为0。之后,新键位于1,1,因此总时间为|1-0||1-0|即2。现在第三个键位于位置1,2,因此移动到该键的总时间为|2-1||1-1|=1。所以我们的答案是3。

要求打印的字符串位于最后一个输入行,由上述二维矩阵中的字母组成。

时间计算逻辑是:
如果您在键盘的单元格(x1,y1),现在您想在(x2,y2)按下键,则所用时间将为| x1-x2 | y1-y2 |。您需要计算键入完整字符串所需的总时间<如果无法键入字符串,则必须打印-1。

#include<bits/stdc++.h>

using namespace std;

int main() {
    int n,m;
    cin>>n>>m;
    unordered_map<char, pair<int, int>> map1;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        for(int j=0;j<m;j++) {
            map1.insert({s[j], make_pair(i,j)});
        }
    }
    string key;
    cin>>key;
    long long total=0;
    pair<int,int> sp;
    for(int i=0;i<key.length();i++) {
        if(map1.find(key[i])==map1.end()) {
            total=-1;
            break;
        } else {
            auto it = map1.find(key[i]);
            if(i==0) sp=it->second;
            pair<int,int> p = it->second;
            total+=(abs(p.first-sp.first) + abs(p.second-sp.second));
            sp=p;
        }
    }
    cout<<total;
}

这个解决方案被部分接受,我无法找出它失败的边缘情况。有人能帮我吗?

共有2个答案

王成化
2023-03-14

问题中提到,“手指最初位于键盘的第一个符号”,因此当您在代码中解析键时,if(i==0)sp=it-

公孙锋
2023-03-14

这是一个免费的失败测试用例。

2 31 
YLrJpXOygVUl6MqBIRFWuAKsH7Gw4Z8
kE0tTQdP1CcxSjamizon9e5NfvDbh32
YE 0

应为-1,因为空格不在键矩阵中<它失败了,因为你只在第一个空格前读“单词”。

还有一个:

2 31 
YLrJpXOygVUl6MqBIRFW AKsH7Gw4Z8
kE0tTQdP1CcxSjamizon9e5NfvDbh32
Y E0

应该不是-1,而是。同样的问题,但是矩阵。

因此,您需要做的是更改输入读取以包含空白。

 类似资料:
  • 本文向大家介绍快速入手Python字符编码,包括了快速入手Python字符编码的使用技巧和注意事项,需要的朋友参考一下 前言 对于很多接触Python的人而言,字符的处理和语言整体的温顺可靠相比显得格外桀骜不驯难以驾驭。 文章针对Python 2.7,主要因为3对的编码已经有了很大的改善并且实际原理一样,更改一下操作命令即可。 了解完本文,你可以轻松解决文字处理,特殊平台(Windows?)下的编

  • 问题内容: (这是该问题的后续内容: 使用具有多个键的可解码协议。) 我有以下Swift代码: 我知道,如果我使用并且没有该属性,但如果它是一个可选变量,它仍然可以正确处理它。 例如,以下JSON可使用上面的代码来解析它。 以下JSON也适用。 但是以下操作无效。 如何使所有3个示例正常工作?有什么类似的? 问题答案: 您可以使用以下功能: 返回一个值,该值指示解码器是否包含与给定密钥关联的值。与

  • CodingBat中的给定任务sameEnds: 给定一个字符串,返回出现在字符串开头和结尾且不重叠的最长子字符串。例如,sameEnds(“abXab”)是“ab”。 我的解决方案通过了所有测试,除了一个^: 这里有什么问题?我怎样才能修复它?

  • 给定CodingBat中的任务maxBlock: 给定一个字符串,返回字符串中最大“块”的长度。块是相同的相邻字符的运行。 我的解决方案通过了所有测试,除了一个:

  • Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。 什么是纠删码erasure code? 纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6

  • 问题内容: 是否可以使用存储元组?我有一个类似的元组。但是不起作用。我必须将元组转换为还是绝对不可能?谢谢你的帮助 问题答案: 无法对元组进行编码,因为它不是类,但是一种方法是分别对元组的每个组成部分进行编码,然后在解码时对每个组成部分进行解码,然后将元组的值设置为根据解码内容构造的元组。