参加2020Jam初赛记录与部分题目解答

2023-05-16

Google Jam大赛是谷歌举办的一年一届的在线答算法题的的比赛。初赛比赛时长27小时,一共有5道算法题,总分100分,获得分数30分和以上者,就能晋级下一轮比赛。在这27小时内,选手可以多次进入jam的比赛链接,查看题目和提交代码,每道题可以提交多次。提交后,页面会实时反馈代码运行测试用例结果(通过/未通过),不过不会展示测试结果集。参加Jam的选手,进入前一千名有T恤发放;前三名奖励现金,一般参加人数达数万人,基本没有拿奖的可能了。我在赛事开始前看到了GDG公众号关于JAM的赛事信息推送,于是抱着闲着也是闲着,不如试试水的心态报名参加2020年的Jam。

我大约花了5-6小时,只做对两题,拿到27分,不能进入下一轮比赛了。虽然结果并不好,不过那天过的十分充实,让我感到很愉快,以后一定多多参加类似的算法大赛,愉快自己。下面介绍一下这三道题和我的解题思路,原题目和我的代码会放到github上,github地址。

第一题 矩阵计算(7分)

题目意思是,给定n个int类型矩阵,计算每个矩阵对角线的和(左上角到右下角),并计算矩阵中存在重复数的行数和列数,例如:

输入

3
4
1 2 3 4
2 1 4 3
3 4 1 2
4 3 2 1
4
2 2 2 2
2 3 2 3
2 2 2 3
2 2 2 2
3
2 1 3
1 3 2
1 2 3

输出

Case #1: 4 0 0
Case #2: 9 4 4
Case #3: 8 0 2

4 0 0代表第一个矩阵的对角线上的数之和是4,存在重复数字的行数是0,存在重复数字的列数是0。

解题思路

这题的不难,只要把数据接收存储就可以了。我是用一个二维数组的list来存矩阵数据,根据二维数组的下标就能算出题目的答案了。

第二题 字符串的处理

给定一串纯数字的字符串,在每个字符串左右加上数量相同的左右括号,括号的深度和数字相同,如((2))多个数字之间的括号可以合并,如((2(3)))。给出一个字符串,求出符合条件的加括号的字符串中长度最短的字符串。如0((2)1), (((3))1(2)), ((((4)))), ((2))((2))(1)都是符合条件的字符串,但是第四个不是最短的,因为((22)1)更短,案例:

输入

4
0000
101
111000
1

输出

Case #1: 0000
Case #2: (1)0(1)
Case #3: (111)000
Case #4: (1)

解题思路

这道题我的解题思路是,把字符串分一个数字数组,从第一个数字开始,添加()形成字符串,再把下一个数字加入进来,继续处理新的(),用例子说明容易理解一点。比如对应字符串312,处理逻辑分3步。

  • 第一步:把3处理括号得到(((3)))

  • 第二步:把(((3)))加入第二个数1得到(((3))1)

  • 第三步:把(((3))1)加入第三个数2得到(((3))1(2))

这个加新数得到最短长度的深度括号的字符串的逻辑是这样的,如AB数加C,分B<C, B==C, B>C三种情况处理括号。

  • B < C: B右侧的C)移动到C的右侧。如((2))加新数字1后为,将2右侧的1)移动到1的右侧,得到((2)1)
  • B == C: B右侧所有的)都移动到C的右侧。如((2))加新数字1后为((22))
  • B < C: B右侧的)全部删除,添加C - B(C右侧添加C)。如((2))加新数字3的步骤,1. 删除2右边的),得((23;2. 2右边添加3 - 2(,的((2(3;3. 3右侧添加3次个),得((2(3)))

不断加新数并按上面的逻辑的到新字符串,直到所有的数字都添加完,就得到最终的最短的字符串。

第三题 安排活动

给定一列活动的时间段,把这些计划分配给C和J两个人去完成,但是一个人不能同时完成拥有时间冲突的两项活动。如有三个活动18:00 - 20:00, 19:00 - 21:00 和 22:00 - 23:00,一种安排方式是C去完成18:00 - 20:00这个活动,J去完成19:00 - 21:00 和 22:00 - 23:00这两个活动。当然,C去完成19:00 - 21:00 和 22:00 - 23:00,J去完成18:00 - 20:00也是可以的。如果有三个活动的时间段互相冲突,则这些活动就无法被分配,如18:00 - 20:00, 19:00 - 21:00,19:00 - 22:00。

可以安排的活动列表,输出活动由C和J的一种执行顺序;如果活动列表不能分配,输出IMPOSSIBLE

输入

4
3
360 480
420 540
600 660
3
0 1440
1 3
2 4
5
99 150
1 100
100 301
2 5
150 250
2
0 720
720 1440

输出

Case #1: CJC
Case #2: IMPOSSIBLE
Case #3: JCCJJ
Case #4: CC

解题思路

这题我没有做对,思路错误。

我的思路是,设为A和B两个list,把活动一个一个往里面添加,如果该活动在A中存在一个冲突的活动,就把离不冲突的最近的那个活动放在队列A;另一个放在B,如果队列B也存在一个冲突的,就把A中冲突的放在B中,如果继续存在冲突,则认为无法安排。

正确思路可能是,每进一个新的活动,判断是否A,B列表是否都存在与之冲突的活动,都不存在则插入队列A;如果A存在,B不存在则插入队列B;如果A,B中都存在冲突的活动,将这些冲突的活动都拿出来比较,查看它们之间是否互相冲突,如果冲突则说明活动无法安排;如果不冲突,则把这些活动放到队列B中(如果B中有冲突,放入A,把A冲突翻入B,直到没有冲突),把插入的活动放到A。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

参加2020Jam初赛记录与部分题目解答 的相关文章

  • 查看cookie的3种方式

    1 application中查看 2 network中查看 3 console中通过js查看 4 设置cookie document cookie 61 34 age 61 12 34
  • 关于Hadoop中reducer端combiner的一些思考

    什么是Combiner Functions Many MapReduce jobs are limited by the bandwidth available on the cluster so it pays to minimize t
  • Unity新版ECS框架简介:ECS有什么不同?

    了解过ECS的开发者都知道ECS与Unity原本的开发理念相差很大 xff0c 需要所有Unity开发者重新去学习和适应新的开发框架的代价还是很大的 xff0c Unity为何要做出这么大跨度的尝试呢 xff1f Unity正在尝试解决什么
  • Python 爬取 3 万条游戏评分数据,找到了程序员最爱玩的游戏(附代码)

    本文爬取了游戏网站上所有可见的游戏评分数据进行分析 xff0c 全文包括以下几个部分 xff1a 数据获取数据总览游戏类型分析游戏平台分析游戏名称分析高分游戏汇总代码汇总 全文数据获取及分析均基于python3 6完成 数据获取过程 页面内
  • 手游外挂分类及原理介绍

    一 前言 移动游戏市场近几年突然爆发 xff0c 收入规模快速增长 根据第三方数据统计 xff0c 如图所示 xff0c 国内移动游戏2015年市场规模已达514 6亿 如此火热的市场 xff0c 必然会吸引大量图谋不轨的坏人 外挂已在移动
  • 常见游戏外挂分类及原理概述

    外挂基本概念 要理解外挂 xff0c 首先需要理解网络游戏的数据流 这里所说的数据流定义为游戏本地客户端与游戏后台服务器之间的数据流通 一个数据的产生需要玩家做出对应的操作 xff0c 然后经过网络传输同步到服务器后台 xff0c 服务器后
  • 揭秘《英雄联盟》的游戏数据服务器

    Hey xff0c 大家好 xff01 我是 Bill LtRandolph Clark xff0c 一名英雄联盟的游戏工程师 许多 Rioter 工程师关注大量的内容需要直接发送给玩家问题 这是两个我最近最喜欢的例子之一 xff0c 包括
  • 从纹理中生成法线贴图

    概要 本为主要讲解生成法线贴图的基本方法 xff0c 并在 unity 中进行实现和测试 预备知识 法线贴图和基本的图形学知识 xff0c 基本的向量和极限的知识 高度图或灰度图 一张二维纹理有两个维度 u 和 v xff0c 但其实 xf
  • MySQL死锁产生原因和解决方法

    Mysql 锁类型 一 锁类型介绍 xff1a MySQL有三种锁的级别 xff1a 页级 表级 行级 表级锁 xff1a 开销小 xff0c 加锁快 xff1b 不会出现死锁 xff1b 锁定粒度大 xff0c 发生锁冲突的概率最高 并发
  • Flink 动态实时流计算

    xff08 先给个预告 xff0c 下一期关于Flink的文章会讲如何将机器学习融入Flink中 xff09 摘要 本文提供了一种在流计算中不停机动态加载代码来做到敏捷而快速的开发的思路 代码提供在 Lofka 的 lofka night
  • 通俗说Openvswitch

    Openvswitch xff0c 顾名思义 xff0c Open xff0c 开源的 xff0c v xff0c virtual xff0c 虚拟的 xff0c switch交换机 通俗的讲就是一款开源的软件 xff0c 可以创建虚拟的交
  • 人间还是仙界?聊一聊linux系统的用户空间和内核空间

    我们生活在人间 xff0c 但 西游记 里提到 xff0c 在天上还有一个仙界 人间不知道仙界的存在 xff1b 而仙界知道人间的存在 xff0c 神仙也可以从仙界下凡到人间 xff0c 但是被严格管控的 软件设计的灵感其实都来自于生活 x
  • 什么是实时数据库?

    实时数据库是数据库系统发展的一个分支 xff0c 它适用于处理不断更新的快速变化的数据及具有时间 限制的事务处理 实时数据库技术是实时系统和数据库技术相结合的产物 xff0c 研究人员希望利用数据库 技术来解决实时系统中的数据管理问题 xf
  • 带你阅读linux内核源码:linux内核源代码编程规范

    linux内核代码是许许多多遵循相同内核开发规范的牛人们的共同的创造的结晶 作为一名linux内核或者驱动开发工程师 xff0c 很有必要了解这些内核开发规范 好处有以下几个 xff1a 这些约定或者规范对我们阅读linux内核源码 了解设
  • linux进程上下文、中断上下文介绍,以及为什么软中断不能睡眠?

    linux内核的软中断处理程序中能不能睡眠 xff1f 这是一个值得讨论的问题 答案其实很简单 xff0c 那就是不能 因为Linux的软中断处理程序的运行上下文有可能是中断上下文 xff08 注意此处是有可能 xff0c 而并非一定 xf
  • VS2008用devenv.com命令行工具自动编译工程

    转自 xff1a http www cr173 com html 18500 1 html 在vs2008下面提供了devenv com命令行方式 我们可以从VS安装目录 MicrosoftVisual Studio 9 Common7 I
  • 使用ICMP协议检测网络状态

    ICMP xff08 Internet ControlMessages Protocol xff0c 网间控制报文协议 xff09 是TCP IP协议族的子协议 xff0c 是一种面向无连接的协议 xff0c 在IP和路由器之前传递控制消息
  • c++打印enum class

    span class token keyword enum span span class token keyword class span span class token class name A span span class tok
  • 使用strace查找Emacs启动阻塞的原因(exec-path-from-shell)

    原文地址 https www lujun9972 win blog 2019 09 26 使用strace查找emacs启动阻塞的原因 exec path from shell index html 之前就觉得我的Emacs启动好慢 xff
  • 为Linux安装虚拟PDF打印机

    原文地址 https lujun9972 github io blog 2020 04 11 为linux安装虚拟pdf打印机 index html 今天发现一个 CUPS PDF 项目 可以为 CUPS Common Unix Print

随机推荐

  • ubuntu系统启用shell远程登陆

    Ubuntu desktop系统安装后 xff0c 想使用shell远程登陆 xff0c 会提示 Connecting to 192 168 220 133 22 Could not connect to 39 192 168 220 13
  • 枚举类(ENUM)用法总结

    对于ENUM一直是比较陌生的 xff0c 在和某酷爱ENUM的大神合作时 xff0c 才慢慢接触到ENUM的用法 1 ENUM是什么 xff1f 首先ENUM是一个类 xff0c 不像String int之类的数据结构 xff0c 更类似于
  • Python循环结构练习2

    Problem A xff1a 循环结构 输出数列2 xff0c 5 xff0c 8 xff0c 11 xff0c 14 题目描述 输入正整数n xff08 n 100 xff09 xff0c 输出数列2 xff0c 5 xff0c 8 x
  • KVM网络模型之:PCI Passthrough

    目录 PCI Passthrough技术介绍和KVM中配置 案例 内核启用 重新启动虚拟机实例 PCI Passthrough技术介绍和KVM中配置 PCI Passthrough技术是虚拟化网卡的终极解决方案 xff0c 能够让虚拟机独占
  • 微信开放公众平台,扩展自定义类,定时提醒,定时发消息

    微信开放公众平台 xff0c 扩展自定义类 xff0c 定时提醒 xff0c 定时发消息 lt php class MyapiAction extends BaseAction public function index 微医疗 预约提醒
  • Ubuntu配置iptables规则

    Ubuntu配置防火墙 xff0c 并且开机iptables自启动规则 适用于CentOS 1 登录root账号 span class token comment 切换到root账号 span super 64 super span cla
  • Linux记录用户执行命令

    span class token shebang important bin bash span span class token comment By lumia98 64 vip qq com span span class token
  • Nginx规则配置实例

    配置某个ip或者页面禁止访问及跳转方法 server listen 80 server name www test com cn location proxy redirect off proxy set header host host
  • Debian 11.2安装ssh服务

    切换到root用户 更新软件源 span class token function apt get span update 安装ssh span class token function apt get span span class to
  • Python计算文件大小

    span class token comment usr bin env python span span class token comment coding utf 8 span span class token triple quot
  • Python获取文件内的下一行数据

    span class token comment usr bin env python span span class token comment Version 61 3 8 1 span span class token comment
  • iptables配置实例

    查看当前所有规则 iptables L n 查看所有规则 iptables nL line number 显示行 iptables nvL line number 显示行 清空所有配置 iptables F iptables X iptab
  • 利用Shell脚本校验数据一致性

    span class token shebang important bin bash span span class token comment span span class token comment 检测两台服务器指定目录下的文件一
  • Debian11系统Redis源码安装

    span class token shebang important bin bash span span class token comment Debian11 Redis6 2 6安装 span span class token co
  • iOS 根据文字内容设置cell 的高度

    今天学习一个简单的 根据内容的大小设置cell 的高度 第一步 建两个类 分别继承于UIViewController 和UITableViewCell 第二步 mainViewController h import lt UIKit UIK
  • Python下载GitHub数据

    配置文件 span class token punctuation span Source span class token punctuation span Source path span class token operator 61
  • pip 指定安装位置

    离线安装且指定位置 sudo pip3 install no index find links 61 requirements r requirements txt target 61 usr lib python3 dist packag
  • [微服务感悟] 服务雪崩与熔断器

    文章目录 什么是服务雪崩解决方式熔断器舱壁模式 服务隔离 什么是服务雪崩 之前工作中出现了这样的一个问题 xff0c 有一个业务服务 xff0c 它的功能是政府某部门的文件流转柜 那个业务中原本每个外部请求都有一个独立的线程池去处理任务 x
  • [微服务感悟] 很好理解的分布式事务

    事务是保证一系列操作是一个整体 xff0c 要么都执行 xff0c 要么都不执行 比如A给B转账 xff0c A扣钱了 xff0c B的账户的钱也要加上去 xff0c 不能出现A扣钱B不加钱 xff0c 或者B加钱A不扣钱的情况 在单体程序
  • 参加2020Jam初赛记录与部分题目解答

    Google Jam大赛是谷歌举办的一年一届的在线答算法题的的比赛 初赛比赛时长27小时 xff0c 一共有5道算法题 xff0c 总分100分 xff0c 获得分数30分和以上者 xff0c 就能晋级下一轮比赛 在这27小时内 xff0c