题目: 有一个特殊的键盘,只有a-zshift共27个按键。其中点击会字母按钮会输出对应的字母,该键盘还有一些特殊的规则:可以通过shift键搭配一个字母输出另一个字母。例如你可以通过shift+a输出b,并且这个输入时支持递归的,即shift+shift+a等同于输入shift+b
现在这个键盘有一部分是失灵的,面对堆积如山的稿子,你想知道这个键盘能否完成接下来的工作?如果可以,每篇稿子需要点击多少次按键?

分析:根据图论的思想,计算所有点到损坏按键的最小路径。难点在于怎么构建对应邻接矩阵的权值,然后根据邻接矩阵采用Floyd方法。代码只测试了给的示例,未完全测试。


注:图片来源于网络。

26个字母建图,自己到自己是0,shift+a到b就是b到a有一条权值1的边,坏掉的键自己到自己是inf,然后每个字母跑一次dij,所有自环不是inf的点里到它距离最近的距离,就是这个字母的最小花费。最后直接处理文本,碰到花费inf的就是-1,否则输出总花费+串长。参见Techiah

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<limits>
using namespace std;
#define INF 1000void floyd(vector<vector<int>>& adjacency_matrix, vector<vector<int>>& path) {int cnt = adjacency_matrix.size();//并入每个节点for (int k = 0; k < cnt; ++k) {for (int i = 0; i < cnt; ++i) {for (int j = 0; j < cnt; ++j) {if (adjacency_matrix[i][k] + adjacency_matrix[k][j] < adjacency_matrix[i][j]) {adjacency_matrix[i][j] = adjacency_matrix[i][k] + adjacency_matrix[k][j];path[i][j] = adjacency_matrix[i][k];}}}}return;
}int main()
{int example;cin >> example;while (example > 0) {--example;vector<vector<int>> matrix(26, vector<int>(26, INF)); //构建邻接矩阵for (int i = 0; i < 26; ++i)matrix[i][i] = 0;  //初始化每个按键均为好的,自己到自己的权重为0int num;cin >> num;char c, d;while (num > 0 && cin >> c >> d) {--num;matrix[c - 'a'][d - 'a'] = 1;  //更新有shift规则的按键的权重}cin >> num;vector<int> bad_key;while (num > 0 && cin >> c) {--num;matrix[c - 'a'][c - 'a'] = INF;  //更新损坏的按键的权重bad_key.push_back(c - 'a');}//floydvector<vector<int>> path(matrix);floyd(matrix, path);//计算到每个按键的最短路径int min_path[26];    //注意: int min_path[26] = { INF };  {INF, 0, 0, 0......}for (int i = 0; i < 26; ++i) {min_path[i] = INF;for (int j = 0; j < 26; ++j) {//注意最短路径计算时只能从未损坏的键到26个键if (find(bad_key.begin(), bad_key.end(), j) != bad_key.end())continue;min_path[i] = min(min_path[i], matrix[j][i]);}}string s;cin >> s;int res = s.size();for (auto c : s) {//如果到某个按键的最短路径为INF,则表明没有路径能到达,输出-1if (min_path[c - 'a'] == INF) {cout << -1 << endl;return 0;}res += min_path[c - 'a'];}cout << res << endl;}
}
3
5
a b
b c
x c
e f
f x
2
b c
helloworldabc
5
a b
b c
x c
e f
f x
4
b c f x
helloworldabcsfx
5
a b
b c
x c
e f
f x
4
b c f g
helloworldabcsfg

网易2019暑期实习笔试相关推荐

  1. 2015腾讯暑期实习笔试题目

    2015腾讯暑期实习笔试题目 2015腾讯暑期实习笔试题目 (1).层次遍历序列为ABCDEFG的二叉树,其中序遍历的序列是什么? (2).ABCABC为入栈的顺序,倘若出栈的顺序为ABCCBA,那么 ...

  2. 20200418京东算法暑期实习笔试 Python3

    20200418京东算法暑期实习笔试 Python3 第一题 题目描述 输入描述 输出描述 示例输入 示例输出 解释 思路 代码 第二题 题目描述 输入描述 输出描述 示例输入 示例输出 思路 代码 ...

  3. IBM暑期实习笔试后总结

    今天2:00IBM暑期实习笔试,一百来号人. 去年,我曾经做过一次IBM笔试题,那时没有智力测试.我选做的JAVA + LINUX,一小时. 今年,加了智力题.时间加长到2个半小时,但都是每部分做完就 ...

  4. 京东2019暑期实习面经

    京东2019暑期实习面经Java开发岗 概述 面试开始是自我介绍,按照了看过的博客的经验简单说了一下,然后就开始让你介绍项目经验,这样按照经验介绍,之后就问了一些技术性的问题.以下是对一些问题的总结: ...

  5. 2021广联达暑期实习笔试C++

    2020广联达暑期实习笔试 30道选择题,多数是给一段代码(类)判断输出: 编程题: 剪花 n只花,第i只的高度为h(i)厘米,最适宜生长的高度是w厘米,所以需要修剪.当修剪一只花时,其右边的花就会长 ...

  6. 2013微软暑期实习笔试面试总结

    一共参加了1次笔试,3次面试.总的感觉是,微软暑期实习的笔试难度不算很大,面试难度随面试官而异,毕竟是微软,卧虎藏龙的地方,面试官想虐人还是非常容易的. 1.笔试 笔试挺简单,虽然2013年的题和20 ...

  7. 阿里巴巴2020暑期实习笔试题目及经验分享

    声明:如果侵权,请联系立即删除!! 声明:如果侵权,请联系立即删除!! 声明:如果侵权,请联系立即删除!! 阿里巴巴2020暑期实习笔试题 一.考试简介 二.题目详情 二.经验之谈 一.考试简介 考试 ...

  8. 2019暑期实习面试 - 腾讯PCG移动客户端iOS开发面试

    基本信息 事业群:PCG 岗位:移动客户端开发(iOS.Objective-C语言开发) 实习时间:6月份之后的暑期实习 面试日期:3月30日 - 3月31日 offer call:4月10日(看到很 ...

  9. 360企业安全2019暑期实习算法岗笔试

    目录 选择题 编程题 第一题 题意 思路 代码 第二题 题意 思路 代码 360好像之前有一轮笔试面试,不过我没投,错过了.前几天投的,今天(2019.4.24)晚上7点笔试,共90分钟,20个选择题 ...

最新文章

  1. Java Private、protected、public、以及无修饰符的可见范围
  2. str字符串 encoding( ) 方法
  3. linux查看crontab服务执行日志
  4. 40K刚面完Java岗,这些技术必须掌握
  5. Angular 页面元素的DOM级别的删除过程
  6. 设计和实现一个 Chrome 插件提升登录效率
  7. vue实现搜索框记录搜索历史_2018-09-13 基于Vue的搜索栏功能实现(we-ui)
  8. javascript变量声明语法的应用和分号讲究适用性
  9. mysql插入二进制命令_MySQL将语句写入到binlog二进制日志中
  10. Uva_11427 Expect the Expected
  11. maven 不能设置为web2.5的解决方法
  12. 《solidity学习笔记》chapter 2-solidity基础知识
  13. Unity采用Forge Networking Remastered数据的远程传输 Basic RPC Example
  14. 移动鼠标计算鼠标偏移量
  15. Expandable TabBar
  16. Pytorch创建多任务学习模型
  17. 计算机管理中不显示u盘,优盘不显示,教您优盘不显示处理方法
  18. 项目管理 之三 项目生命周期、项目管理生命周期、产品生命周期、阶段方法、质量管理、配置管理等
  19. 如何获取伪装ip下的真实ip地址
  20. JavaWeb个人信息修改及修改密码

热门文章

  1. alphago是计算机在什么方面的应用,alphago用了哪些人工智能的技术 知乎
  2. em算法直观_直观地解释了10种图形算法
  3. matlab清除所有图形窗口,matlab图形操作基础
  4. 服务器换主板后找不到磁盘,服务器硬盘频繁丢失的非常奇怪无解问题
  5. 高等数学(第七版)同济大学 习题8-5 个人解答
  6. 评论留言用html怎么做,利用JS实现评论留言发布表单代码
  7. Java NIO Socket编程实例
  8. 关于DM达梦数据库,获取用户表信息、数据表结构、数据表创建语句、主键等信息的sql
  9. DCDC直流转换器(自用版
  10. 金蝶K3cloud python插件之更新物料列表自定义字段(成本更新)