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。

参加2020Jam初赛记录与部分题目解答相关推荐

  1. 1 Robotics: Aerial Robotics 第3+4周 课程学习记录及课后习题解答

    Robotics: Aerial Robotics 第3+4周 WEEK - 3 Quiz Programming Assignment: 2-D Quadrotor Control WEEK - 4 ...

  2. 2020全国高校计算机能力挑战赛程序设计赛Python组区域赛(初赛)试题及参考解答

    2020全国高校计算机能力挑战赛程序设计赛Python组区域赛(初赛)试题及参考解答 简介 赛题构成 代码提交说明 成绩评定 2020真题 1-1 数字与相邻的前.后数字之和可以被4整除 题目 个人对 ...

  3. HDU 3826 Squarefree number:题目解答源码

    2019独角兽企业重金招聘Python工程师标准>>> HDU 3826 Squarefree number:题目解答源码 In mathematics,a squarefree n ...

  4. HDU 1036 Average is not Fast Enough!:题目解答源码

    2019独角兽企业重金招聘Python工程师标准>>> HDU 1036 Average is not Fast Enough!:题目解答源码 A relay is a race f ...

  5. java职业教育考试题_Java认证考试中Java构造方法题目解答

    [Java认证考试中Java构造方法题目解答]java中,在创建一个新的对象的时候,会调用其父亲的构造方法,测试程序如下: class parent{ int a=5; public parent() ...

  6. CodeM2018美团 初赛A轮 题目二 下棋

    CodeM2018美团 初赛A轮 题目二 下棋 [编程|1000分] 下棋 时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++ 262144K,其他语言 524288K 64bit IO ...

  7. 【PAT】乙级题目解答合集(c++)

    [PAT]乙级题目解答合集(c++) 本篇文章为对PAT乙级1001-1095的题目解答的汇总 1001 害死人不偿命的(3n+1)猜想 (15 分) 1002 写出这个数 (20 分) 1003 我 ...

  8. 免费资源快来看 蓝桥杯单片机组历届省赛国赛题目解答(省一国二)

    蓝桥杯比赛 单片机组 历届国赛题目解答 国赛题目 国赛题目        蓝桥杯省赛之后不到一个月就是国赛了,我先给大家分享到这里,小伙伴们可以先关注收藏然后后续有需要可以再来看看哦,点击下面的文字, ...

  9. 2010C语言题目解答,2010C语言题目解答讲解.doc

    2010C语言题目解答讲解 2010高考真题详解 第一套 [程序填空] 题目:对只包含'-'和字母字符的字符串str进行如下处理: 删除str中前导和尾部连续的'-'字符,保留串中字母字符以及字母间的 ...

最新文章

  1. Electron的代码调试
  2. python | ^ ~
  3. 排序方法整理Java - 冒泡排序、选择排序、插入排序、快速排序
  4. Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案
  5. Python 代码混淆和加密技术
  6. leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)
  7. ESXI忘记密码怎么办?
  8. Anigram单词(51Nod-1095)
  9. 积少成多Flash(4) - ActionScript 3.0 实例之Hello World, 时钟, 计时器
  10. 计算机专业学校课程改革,中专学校计算机专业课程改革初探
  11. git 解决push报错:[rejected] master -> master (fetch first) error: failed to push some refs to ‘ ‘
  12. [经验教程]拼多多直接免拼是什么意思?
  13. CSDN产品公告第3期:博客数据统计功能上线,OFFER大挑战等你来!
  14. iTween基础之iTweenPath(自定义路径移动)
  15. 西门子PLC配KUKA机器人程序 程序为西门子S7-1500PLC博途调试
  16. 【读书2】【2014】基于MATLAB的雷达信号处理基础(第二版)——多普勒频移(1)
  17. 佛盛龙桌(台)球厅管理软件系统
  18. 酒店计算机系统管理实训,餐饮管理模拟实训系统
  19. spring-cloud开发微服务笔记(二):高可用Eureka注册中心的搭建与RestTemplate和Fengin客户端调用微服务示例
  20. gatsby构建项目

热门文章

  1. 解决Ubuntu apt安装时连接超时Connection timed out [IP: 2001:67c:1562::16 80]
  2. 测试人遇到被测 APP 要下架,怎么处理?
  3. 计算机主板 辐射,想当年单反镜头竟然还有核辐射?
  4. 【拜读】HTTPS和SSL/TLS 协议
  5. HTML+CSS大作业 电影网站设计——电影介绍(11页) 大学生电影网页作品 电影网页设计作业模板 学生网页制作源代码下载
  6. LYNC2010两台虚机部署笔记2
  7. [BJOI2006]狼抓兔子
  8. 一次小米手环BLE通信协议的逆向之旅
  9. 活用async/await,实现一些让Vue更好用的装饰器
  10. D. Colored Rectangles