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 ...
随机推荐
- ORACLE安装(12c-Redhat6.5)
Oracle安装(12c-Redhat6.5) Redhat6.5系统准备 / 10G SWAP 4G /boot 200M /HOME 4G /usr 8G /var 4G /u01 Preinst ...
- 【Python算法】渐进记法 与 性能测量工具cProfile
对于某个比较简单的算法,我们有时候确实能够精确地分析出算法的复杂度. 比如算法复杂度为5n^2+10n+6,但是事实上并不需要这样,因为当n足够大时,可以忽略掉低阶项和最高次项的系数,因此就引出了“渐 ...
- Linux命令:nl
全称:number lines of files 用途:显示的时候添加行号. 格式:nl [OPTION]... [FILE]... 类型:nl is /usr/bin/nl 说明: 该命令主要就是针 ...
- Flask之flask-session
简介 flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如: redis:保存数 ...
- oracle编程艺术--runstst工具
runstats工具是< oracle database 9i/10g/11g编程艺术 深入数据库体系结构>作者写的一个统计性能工具,能对做同一件事的两个方法进行比较,得到孰优孰劣的结果. ...
- django URL的补充 默认值 传多个参数
url 后面还可以加上默认值 默认值 url(r'^index/', views.index, {'name': 'root'}), urls.py url对应关系 from django.conf. ...
- jQuery中this与$(this)的差别
jQuery中this与$(this)的差别 $("#textbox").hover( function() { this.title ...
- PAT 1049 Counting Ones [难]
1049 Counting Ones (30 分) The task is simple: given any positive integer N, you are supposed to coun ...
- Selenium IDE界面学习
- android ListView SimpleAdapter 带图片
main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...