第一题:

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的更多相关文章

  1. 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 ...

  2. google Kickstart Round F 2017 四道题题解

    Problem A. Kicksort 题意抽象一下为: 对于一个每次都从数列正中间取划分数的快速排序,给定一个1-n的排列,问快排的复杂度对于这个排列是否会退化为最坏复杂度. 数据范围: 测试组数1 ...

  3. Google Kickstart Round.B C. Diverse Subarray

    这题又是万恶的线段树 maxx[j]存储的是 l = xxx, r = j的时候的答案 我们会让 l 从 1到n 的遍历中,查询线段树的[l, n]中最大的答案 因为query的下界是n,所以单次查询 ...

  4. Google Kickstart Round E 2018 B. Milk Tea

    太蠢了,,,因为初始化大数据没过,丢了10分,纪念一下这个错误 大概思路:先求出让损失值最小的排列,由已生成的这些排列,通过更改某一个位置的值,生成下一个最优解,迭代最多生成m+1个最优解即可,遍历求 ...

  5. Google Kickstart在线测试规则以及注意事项

    谷歌招聘在如火如荼的进行中,进谷歌都需要经过谷歌kickstart在线测试,然后过了之后还有五轮的面试- -.好吧毕竟你待遇高,你强你有理.. 下面介绍一下进谷歌的第一关google kickstar ...

  6. Google kickstart 2022 Round A题解

    Speed Typing 题意概述 给出两个字符串I和P,问能否通过删除P中若干个字符得到I?如果能的话,需要删除字符的个数是多少? 数据规模 \[1≤|I|,|P|≤10^5 \] 双指针 设置两个 ...

  7. Kickstart Round H 2019 Problem B. Diagonal Puzzle

    有史以来打得最差的一次kickstart竟然发生在winter camp出结果前的最后一次ks = = 感觉自己的winter camp要凉了 究其原因,无非自己太眼高手低,好好做B, C的小数据,也 ...

  8. google kickstart 2018 round D A Candies

    思路: 对于small数据,由于求和及奇数数量两个限制条件均满足区间单调性,可以直接使用尺取法(滑动窗口法)求解. 对于large数据,奇数数量依然是满足区间单调性的.首先使用尺取法,找到所有满足奇数 ...

  9. [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 ...

随机推荐

  1. 如何在ubuntu上搭建服务器并且可以使用ftp上传

    参考: 配置ftp:  http://jingyan.baidu.com/article/67508eb4d6c4fd9ccb1ce470.html 配置ftp这个中把 新建 allowed_user ...

  2. Logstash之时区问题的建议和修改---filter---and duplicate resolution.

    2. logstash es duplicate https://logstash.jira.com/browse/LOGSTASH-1875 https://logstash.jira.com/br ...

  3. 荣誉墙项目day26 django 项目路由配置

    项目路由配置文件包括:配置目录里的urls.py文件和各个app目录里的urls.py文件 1.include()——从项目主路由分配到各APP主路由 from django.conf.urls im ...

  4. 读取xml文件,写入excel

    在上一篇 Python写xml文件已经将所有订单写入xml文件,这一篇我们把xml文件中的内容读出来,写入excel文件. 输入xml格式: <?xml version="1.0&qu ...

  5. 0604-Zuul构建API Gateway-Zuul的回退

    一.概述 参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#hystrix-f ...

  6. abap 开发之创建表维护生成器

    在sap开发中有时需要对一些自建表维护数据,但又不想写程序,怎么办呢??这个时候我们可以直接生成个表维护生成器,为其定义一个事物码就ok了.以下是表格维护生成器的生成步骤. 首先我们需要先定义表.输入 ...

  7. testng日志 ITestListener

    上一节我们写一个日志类 extends   TestListenerAdapter ----------TestListenerAdapter 是 ITestListener 实现的一个类 这一节,我 ...

  8. k8s-离线安装k8s

    1.开始 目标 coreos的igniton.json有很强的可配置性,通过安装时指定集群配置的ignition.json, 安装完成后打开https://{{Master_IP}}:6443/ui直 ...

  9. [笔记] Ubuntu 18.04安装cuda 10及cudnn 7流程

    安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 任务:安装 CUDA 10及cuDNN 7 工具下载 NVidia官网下载下列文件: CUDA 10:cu ...

  10. Eclipse下创建Maven项目(转)

    原文出自:http://www.cnblogs.com/hongwz/p/5456616.html 1.新建Maven项目 1.1 File -> New -> Other 1.2 选择M ...