网易2019暑期实习笔试
题目: 有一个特殊的键盘,只有a-z
和shift
共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暑期实习笔试相关推荐
- 2015腾讯暑期实习笔试题目
2015腾讯暑期实习笔试题目 2015腾讯暑期实习笔试题目 (1).层次遍历序列为ABCDEFG的二叉树,其中序遍历的序列是什么? (2).ABCABC为入栈的顺序,倘若出栈的顺序为ABCCBA,那么 ...
- 20200418京东算法暑期实习笔试 Python3
20200418京东算法暑期实习笔试 Python3 第一题 题目描述 输入描述 输出描述 示例输入 示例输出 解释 思路 代码 第二题 题目描述 输入描述 输出描述 示例输入 示例输出 思路 代码 ...
- IBM暑期实习笔试后总结
今天2:00IBM暑期实习笔试,一百来号人. 去年,我曾经做过一次IBM笔试题,那时没有智力测试.我选做的JAVA + LINUX,一小时. 今年,加了智力题.时间加长到2个半小时,但都是每部分做完就 ...
- 京东2019暑期实习面经
京东2019暑期实习面经Java开发岗 概述 面试开始是自我介绍,按照了看过的博客的经验简单说了一下,然后就开始让你介绍项目经验,这样按照经验介绍,之后就问了一些技术性的问题.以下是对一些问题的总结: ...
- 2021广联达暑期实习笔试C++
2020广联达暑期实习笔试 30道选择题,多数是给一段代码(类)判断输出: 编程题: 剪花 n只花,第i只的高度为h(i)厘米,最适宜生长的高度是w厘米,所以需要修剪.当修剪一只花时,其右边的花就会长 ...
- 2013微软暑期实习笔试面试总结
一共参加了1次笔试,3次面试.总的感觉是,微软暑期实习的笔试难度不算很大,面试难度随面试官而异,毕竟是微软,卧虎藏龙的地方,面试官想虐人还是非常容易的. 1.笔试 笔试挺简单,虽然2013年的题和20 ...
- 阿里巴巴2020暑期实习笔试题目及经验分享
声明:如果侵权,请联系立即删除!! 声明:如果侵权,请联系立即删除!! 声明:如果侵权,请联系立即删除!! 阿里巴巴2020暑期实习笔试题 一.考试简介 二.题目详情 二.经验之谈 一.考试简介 考试 ...
- 2019暑期实习面试 - 腾讯PCG移动客户端iOS开发面试
基本信息 事业群:PCG 岗位:移动客户端开发(iOS.Objective-C语言开发) 实习时间:6月份之后的暑期实习 面试日期:3月30日 - 3月31日 offer call:4月10日(看到很 ...
- 360企业安全2019暑期实习算法岗笔试
目录 选择题 编程题 第一题 题意 思路 代码 第二题 题意 思路 代码 360好像之前有一轮笔试面试,不过我没投,错过了.前几天投的,今天(2019.4.24)晚上7点笔试,共90分钟,20个选择题 ...
最新文章
- Java Private、protected、public、以及无修饰符的可见范围
- str字符串 encoding( ) 方法
- linux查看crontab服务执行日志
- 40K刚面完Java岗,这些技术必须掌握
- Angular 页面元素的DOM级别的删除过程
- 设计和实现一个 Chrome 插件提升登录效率
- vue实现搜索框记录搜索历史_2018-09-13 基于Vue的搜索栏功能实现(we-ui)
- javascript变量声明语法的应用和分号讲究适用性
- mysql插入二进制命令_MySQL将语句写入到binlog二进制日志中
- Uva_11427 Expect the Expected
- maven 不能设置为web2.5的解决方法
- 《solidity学习笔记》chapter 2-solidity基础知识
- Unity采用Forge Networking Remastered数据的远程传输 Basic RPC Example
- 移动鼠标计算鼠标偏移量
- Expandable TabBar
- Pytorch创建多任务学习模型
- 计算机管理中不显示u盘,优盘不显示,教您优盘不显示处理方法
- 项目管理 之三 项目生命周期、项目管理生命周期、产品生命周期、阶段方法、质量管理、配置管理等
- 如何获取伪装ip下的真实ip地址
- JavaWeb个人信息修改及修改密码
热门文章
- alphago是计算机在什么方面的应用,alphago用了哪些人工智能的技术 知乎
- em算法直观_直观地解释了10种图形算法
- matlab清除所有图形窗口,matlab图形操作基础
- 服务器换主板后找不到磁盘,服务器硬盘频繁丢失的非常奇怪无解问题
- 高等数学(第七版)同济大学 习题8-5 个人解答
- 评论留言用html怎么做,利用JS实现评论留言发布表单代码
- Java NIO Socket编程实例
- 关于DM达梦数据库,获取用户表信息、数据表结构、数据表创建语句、主键等信息的sql
- DCDC直流转换器(自用版
- 金蝶K3cloud python插件之更新物料列表自定义字段(成本更新)