2019 google kickstart round A
第一题:
n个人,每个人有一个对应的技能值s,现在要从n个人中选出p个人,使得他们的技能值相同。
显然,如果存在p个人的技能值是相同的,输出0就可以了。如果不存在,就要找出p个人,对他们进行训练,治他们的技能值相同。
训练一个小时,技能值增加1,只有一个教练,也就是只能同时训练一个 人。找出最佳的p个人的方案,输出最小的训练时间。
AC的代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <algorithm>
- using namespace std;
- int s[100010]; // skill score
- long long int t[100010];
- int e[100010];
- int main()
- {
- int tg;
- scanf("%d", &tg);
- int n, p;
- int ca=1;
- while(tg--) {
- scanf("%d %d", &n, &p);
- s[0] = 0;
- for(int i=1; i<=n; i++) {
- scanf("%d", &s[i]);
- }
- sort(s+1, s+n+1);
- t[0] = 0;
- for(int i=1; i<=n; i++) {
- t[i] = t[i-1] + s[i];
- }
- for(int i=p; i<=n; i++) {
- e[i] = t[i] - t[i-p];
- }
- int ans = s[p]*p - e[p];
- int cur;
- for(int i=p; i<=n; i++) {
- cur = s[i]*p - e[i];
- if(cur < ans)
- ans = cur;
- }
- printf("Case #%d: %d\n", ca, ans);
- ca++;
- }
- return 0;
- }
第二题:
每次给你一个R*C的矩阵,矩阵的元素不是1就是0。1代表此处是一个邮局,0代表此处一个邮局,或者理解成是一个需要邮寄的用户。
我们最多可以在某个为0的节点上再建立一个邮局,要输出的是每种方案中所有的用户到最近邮局的曼哈顿距离的最大值的最小值。
显然,如果矩阵中都是1,都是邮局,输出0就可以了(家门口就是邮局)。如果矩阵中存在0,显然“最多可以建一次邮局”的机会必
须要用上,再多建立一个邮局,一定可以减小或者不变当前邮局布局下的曼哈顿的最大值中的最小值。
那这个邮局选择在那个0的位置呢?最直接的方法就是枚举,枚举每个是0的位置,因为R和C的最大值是250。
但我写的代码貌似没过较大的数据量的case。第一次参加kickstart,每台搞明白。
代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <algorithm>
- #include <vector>
- #include <math.h>
- using namespace std;
- struct node
- {
- int x, y;
- int w;
- }cur;
- int main()
- {
- int tg;
- scanf("%d", &tg);
- int r, c;
- int man_dis;
- int ca=1;
- vector<node>que1;
- vector<node>que0;
- while(tg--) {
- que0.clear();
- que1.clear();
- scanf("%d %d", &r, &c);
- char q[300][300];
- for(int i=1; i<=r; i++) {
- scanf("%s", q[i]);
- for(int j=0; j<c; j++) {
- cur.x = i;
- cur.y = j+1;
- if(q[i][j] == '1') {
- que1.push_back(cur);
- } else {
- que0.push_back(cur);
- }
- }
- }
- int ans1 = 0;
- for(int i=0; i<que0.size(); i++) {
- int cur, mm=r+c+1;
- for(int j=0; j<que1.size(); j++) {
- cur = abs(que0[i].x - que1[j].x) + abs(que0[i].y - que1[j].y);
- if(cur < mm)
- mm = cur;
- }
- que0[i].w = mm;
- if(mm > ans1)
- ans1 = mm;
- } // 找出所有普通节点的最小man距离, 找出这些距离里面的最大距离
- if(que0.size() == 0) {
- //
- printf("Case #%d: 0\n", ca);
- ca++;
- } else {
- int ans2 = 0;
- int ans = r+c+1;
- for(int i=0; i<que0.size(); i++) {
- int x1 = que0[i].x;
- int y1 = que0[i].y;
- // 假设当前节点是邮局 更新最大的man距离
- vector<int>mandis;
- mandis.clear();
- for(int j=0; j<que0.size(); j++) {
- int x2 = que0[j].x;
- int y2 = que0[j].y;
- // int dis = abs(que0[i].x - que0[j].x) + abs(que0[i].y - que0[j].y);
- int dis = abs(x1 - x2) + abs(y1 - y2);
- if(dis < que0[j].w) {
- mandis.push_back(dis);
- } else {
- mandis.push_back(que0[j].w);
- }
- }
- ans2 = 0;
- for(int j=0; j<mandis.size(); j++) {
- if(i!=j && mandis[j] > ans2)
- ans2 = mandis[j];
- }
- if(ans2 < ans)
- ans = ans2;
- }
- printf("Case #%d: %d\n", ca, ans);
- ca++;
- }
- }
- return 0;
- }
第三题:
n个座位,编号1---n,现在有q个预定,每次预定都是(L, R),如(1, 3)表示预定了1、2、3的位置。
由于每次的座位预定可能会存在重复的座位预定而导致冲突,现在让你通过一种算法来实现保证每个预定的人
都能分到相同数量的k个座位,并保证这个k是最大的。没想到好的算法,故没有提交。(不过小数据量的情况下
暴力应该好过。依次枚举每个座位,轮流分给有预定的人)。
没有代码!
2019 google kickstart round A的更多相关文章
- google Kickstart Round G 2017 三道题题解
A题:给定A,N,P,计算A的N!次幂对P取模的结果. 数据范围: T次测试,1 ≤ T ≤ 100 1<=A,N,P<=105 快速幂一下就好了.O(nlogn). AC代码: #inc ...
- google Kickstart Round F 2017 四道题题解
Problem A. Kicksort 题意抽象一下为: 对于一个每次都从数列正中间取划分数的快速排序,给定一个1-n的排列,问快排的复杂度对于这个排列是否会退化为最坏复杂度. 数据范围: 测试组数1 ...
- Google Kickstart Round.B C. Diverse Subarray
这题又是万恶的线段树 maxx[j]存储的是 l = xxx, r = j的时候的答案 我们会让 l 从 1到n 的遍历中,查询线段树的[l, n]中最大的答案 因为query的下界是n,所以单次查询 ...
- Google Kickstart Round E 2018 B. Milk Tea
太蠢了,,,因为初始化大数据没过,丢了10分,纪念一下这个错误 大概思路:先求出让损失值最小的排列,由已生成的这些排列,通过更改某一个位置的值,生成下一个最优解,迭代最多生成m+1个最优解即可,遍历求 ...
- Google Kickstart在线测试规则以及注意事项
谷歌招聘在如火如荼的进行中,进谷歌都需要经过谷歌kickstart在线测试,然后过了之后还有五轮的面试- -.好吧毕竟你待遇高,你强你有理.. 下面介绍一下进谷歌的第一关google kickstar ...
- Google kickstart 2022 Round A题解
Speed Typing 题意概述 给出两个字符串I和P,问能否通过删除P中若干个字符得到I?如果能的话,需要删除字符的个数是多少? 数据规模 \[1≤|I|,|P|≤10^5 \] 双指针 设置两个 ...
- Kickstart Round H 2019 Problem B. Diagonal Puzzle
有史以来打得最差的一次kickstart竟然发生在winter camp出结果前的最后一次ks = = 感觉自己的winter camp要凉了 究其原因,无非自己太眼高手低,好好做B, C的小数据,也 ...
- google kickstart 2018 round D A Candies
思路: 对于small数据,由于求和及奇数数量两个限制条件均满足区间单调性,可以直接使用尺取法(滑动窗口法)求解. 对于large数据,奇数数量依然是满足区间单调性的.首先使用尺取法,找到所有满足奇数 ...
- [Google Codejam] Round 1A 2016 - The Last Word
[Problem Description] Problem On the game show The Last Word, the host begins a round by showing the ...
随机推荐
- Centos6.5升级openssh至7.4版本
一,备份配置文件,以备升级失败进行回退 二,下载安装包 wget http://www.zlib.net/zlib-1.2.11.tar.gz wget https://openbsd.mirror. ...
- ajax跨域问题解决之cors篇
现在浏览器出于安全考虑,在域名.协议.端口不同的情况下,浏览器会认为这是跨域,ajax请求是不允许跨域的. 如果我们有跨域的需求,可以使用cors解决.其原理就是,在请求之前先发送一个OPTIONS请 ...
- Delphi开发的服务在Windows2003 64位注册方式。
1.在sysWoW32目录下找到cmd.exe,右键运行方式选择administrator,输入密码后.2.TrainServer.exe -install 安装服务.
- 通过Nginx反向代理实现IP分流
通过Nginx做反向代理来实现分流,以减轻服务器的负载和压力是比较常见的一种服务器部署架构.本文将分享一个如何根据来路IP来进行分流的方法. 根据特定IP来实现分流 将IP地址的最后一段最后一位为0或 ...
- LeetCode题目_Reverse Integer
最近在LeetCode上做题,写点东西记录一下,虽然自己做的都是些很水的题目,但是重在练手. 题号7:Reverse Integer,题目描述: Reverse digits of an intege ...
- 使用LoadRunner的Web(HTTP/HTML)协议录制手机app脚本
一.打开HP Virtual User Generator,创建虚拟用户脚本,选择Web(HTTP/HTML)协议:
- Unity3D优化技巧系列七
笔者介绍:姜雪伟,IT公司技术合伙人.IT高级讲师,CSDN社区专家,特邀编辑.畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- Zabbix3的离线安装
背景与环境 由于实际情况需求,zabbix在局域网中进行部署,遇到许多问题,在此记录. 操作系统:CentOS 6.9(使用的最小安装) zabbix版本:zabbix-3.0.13(LTS) php ...
- Springboot+shiro配置笔记+错误小结
软件152 尹以操 springboot不像springmvc,它没有xml配置文件,那该如何配置shiro呢,其实也不难,用java代码+注解来解决这个问题.仅以此篇记录我对shiro的学习,如有对 ...
- PAT 1052 Linked List Sorting [一般]
1052 Linked List Sorting (25 分) A linked list consists of a series of structures, which are not nece ...