google Kickstart Round F 2017 四道题题解
Problem A. Kicksort
题意抽象一下为:
对于一个每次都从数列正中间取划分数的快速排序,给定一个1-n的排列,问快排的复杂度对于这个排列是否会退化为最坏复杂度。
数据范围: 测试组数1 ≤ T ≤ 100. 2 ≤ N ≤ 10000.
思路:
如连连看一般在一列数中反复消去正中间一个,判断其是否一直是目前数列的最小元素或最大元素。
模拟即可,维护一个当前数列最小值,当前数列最大值,消去边界l和r。(注意到每次消去的元素在原数列中必然组成一个连续区间)
每次判断消去边界应该左移还是右移,消去数是否为当前数列最小值或最大值,是则更新最小值或最大值,否则输出NO。
AC代码:
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int MAXN=;
int a[MAXN];
int main()
{
// freopen("in.txt","r",stdin);
freopen("A-large (1).in","r",stdin);
freopen("A-large (1).out","w",stdout);
int T,n,tempmax,tempmin,l,r,mid;
scanf("%d",&T);
rep(t1,,T)
{
scanf("%d",&n);
for(int i=;i<n;++i) scanf("%d",&a[i]);
tempmax=n;
tempmin=;
int flag=;
l=(n-)/;r=l+;
rep(i,,n-)
{
mid=(l+n-r)/;
if(mid<=l)
{
mid=l;
l--;
}
else
{
mid=r;
r++;
}
if(a[mid]==tempmax)
{
tempmax-=;
}
else if(a[mid]==tempmin)
{
tempmin+=;
}
else
{
flag=;
break;
}
}
if(flag) printf("Case #%d: YES\n",t1);
else printf("Case #%d: NO\n",t1);
}
return ;
}
Problem B. Dance Battle:
维护一下循环头尾,贪心即可。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int MAXN=;
int a[MAXN];
int main()
{
freopen("B-large.in","r",stdin);
freopen("B-large.out","w",stdout);
int T,e,n,head,tail,ans;
scanf("%d",&T);
rep(t1,,T)
{
ans=;
scanf("%d%d",&e,&n);
rep(i,,n) scanf("%d",&a[i]);
sort(a+,a+n+);
head=;tail=n;
while(head<tail)
{
while(e>a[head]&&head<tail)
{
e-=a[head++];
ans++;
}
if(ans==) break;
if(tail>head)
{
e+=a[tail--];
ans--;
}
}
if(e>a[head]) ans++;
printf("Case #%d: %d\n",t1,ans);
}
return ;
}
Problem C. Catch Them All
把题意抽象一下:
给一个N个点M条边的无向图。
初始时人会等概率随机出生在地图上某个点上,之后每一轮等概率随机去地图上的另外N-1个点中的某一个。(即以1/N-1的概率前往他所在的点以外的N-1个点中的某一个)。每次走的都是最短路。
问:P轮后总路程的期望。
数据范围:
1 ≤ T ≤ 100.
2 ≤ N ≤ 100.
1 ≤ P ≤ 109.
以轮数为阶段,考虑第i轮到达各个点的期望与第i+1轮到达各个点的期望之间的线性递推关系。
然后矩阵快速幂。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int MAXN=;
int d[][];
double ans;
int n,m,p;
const int INF=~0U>>;
int F_1[];
typedef struct matrix
{
int r;
double a[MAXN][MAXN];
matrix(int rr):r(rr)
{
for(int i=;i<r;++i)
{
for(int j=;j<r;++j) a[i][j]=;
}
}
void m0()
{
for(int i=;i<r;++i)
{
for(int j=;j<r;++j) a[i][j]=;
}
}
void me()
{
for(int i=;i<r;++i)
{
for(int j=;j<r;++j)
{
if(i==j) a[i][j]=;
else a[i][j]=0.0;
}
}
}
matrix operator *(const matrix B)const
{
matrix tmp(r);
for(int i=;i<r;++i)
{
for(int j=;j<r;++j)
{
for(int k=;k<r;++k)
tmp.a[i][j]+=a[i][k]*B.a[k][j];
}
}
return tmp;
} }mat;
mat Pow(mat A,int t)
{
mat res(A.r);
res.me();
while(t)
{
if(t&) res=A*res;
A=A*A;
t=t/;;
}
return res;
}
mat Ans(n);
void init()
{
memset(d,0x3f,sizeof(d));
scanf("%d%d%d",&n,&m,&p);
int u,v,w;
rep(i,,m)
{
scanf("%d%d%d",&u,&v,&w);
d[u][v]=d[v][u]=w;
}
Ans.r=n+;
Ans.m0();
rep(i,,n) d[i][i]=;
rep(k,,n)
{
rep(i,,n)
{
rep(j,,n)
{
if(d[i][j]>d[i][k]+d[k][j]) d[i][j]=d[i][k]+d[k][j];
}
}
}
rep(i,,n)
{
d[i][]=;
rep(j,,n)
{
d[i][]+=d[i][j];
}
}
/* F_1[1]=0;
rep(i,2,n) F_1[i]=d[1][i];
F_1[n+1]=1;*/
// mat Ans;
rep(i,,n-)
{
rep(j,,n)
{
if(j==n) Ans.a[i][j]=(double)d[i+][]/(n-);
else if(i==j) Ans.a[i][j]=;
else Ans.a[i][j]=(double)/(n-);
}
}
Ans.a[n][n]=1.0;
/* rep(i,0,n)
{
rep(j,0,n)
{
printf("%.5f ",Ans.a[i][j]);
}
printf("\n");
}*/
}
void work()
{
mat temp(n);
temp=Pow(Ans,p);
ans=0.0;
ans=temp.a[][n];
}
int main()
{
// freopen("in.txt","r",stdin);
freopen("C-large-practice.in","r",stdin);
freopen("C-large-practice.out","w",stdout);
int T;
scanf("%d",&T);
rep(t1,,T)
{
init();
work();
printf("Case #%d: %.6f\n",t1,ans);
}
return ;
}
Problem D. Eat Cake
裸DP。大水题。差评。
google Kickstart Round F 2017 四道题题解的更多相关文章
- 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 ...
- Kickstart Round D 2017 problem A sightseeing 一道DP
这是现场完整做出来的唯一一道题Orz..而且还调了很久的bug.还是太弱了. Problem When you travel, you like to spend time sightseeing i ...
- 2019 google kickstart round A
第一题: n个人,每个人有一个对应的技能值s,现在要从n个人中选出p个人,使得他们的技能值相同. 显然,如果存在p个人的技能值是相同的,输出0就可以了.如果不存在,就要找出p个人,对他们进行训练,治他 ...
- Kickstart Round D 2017 : A
思路: 动态规划. large数据的时间范围很大,无法设计入状态中.转换思路为定义dp[i][j]为当前在景点i,并且已经游览了j个景点所花费的最小时间,这种思想与leetcode45类似.于是转移方 ...
- 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 ...
- # Codeforces Round #529(Div.3)个人题解
Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...
- Google Summer of Code 2017 经验谈
Google Summer of Code (GSoC) 2018 又要开始了. 如果想实现你心中的开源梦想, 用代码让世界变得更美好. 参加GSoC可能是你进入开源的世界最好途径. GSoC是什么 ...
随机推荐
- 嵌入式Linux开发之uboot启动Linux整体流程分析
嵌入式Linux开发之uboot启动Linux整体流程分析 Uboot全称Universal Boot Loader,一个遵循GPL协议的的开源项目,其作用是引导操作系统,支持引导linux.VxWo ...
- springboot秒杀课程学习整理1-5
1)交易模型设计 交易模型(用户下单的交易模型)OrderModel id(String 交易单号使用String), userId,itemId,amount(数量),orderAmount(总金额 ...
- 前端开发面试题总结之——JAVASCRIPT(二)
___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...
- 关于C#mvc用iis发布,虚拟目录的问题。
mvc关于iis发布虚拟目录的问题,解决方法是修改代码中路径的方式,例如ajax中常用的为url:“/Home/Index”,可修改为 url: '@Url.Action("Index&qu ...
- json、demjson
一.json 概述: json.dumps():将 Python 对象编码成 JSON 字符串, dic -> json str json.dump() :将 Python 对象保存成 JSO ...
- python threading模块中的join()方法和setDeamon()方法的一些理解
之前用多线程的时候看见了很多文章,比较常用的大概就是join()和setDeamon()了. 先说一下自己对join()的理解吧: def join(self, timeout=None): &quo ...
- 最短路径HDU3790(Dijkstra)
准备考研,荒废了好多东西,希望做了正确的决定 /********************************************************* *author:chen xin * ...
- Buzzsumo大型教程(内容营销+外链outreach必备)营销神器
做内容营销,Buzzsumo基本是必备工具.做谷歌白帽SEO的百分八十应该都用过或者至少接触过.在国外就更不用说了,很多网络营销大牛眼里,Buzzsumo的重要程度绝对超过Ahrefs! Buzzsu ...
- react 表单受控和非受控
参见:https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/ 非受控: onSubmit = ()=>{ const val ...
- L1-063 吃鱼还是吃肉
国家给出了 8 岁男宝宝的标准身高为 130 厘米.标准体重为 27 公斤:8 岁女宝宝的标准身高为 129 厘米.标准体重为 25 公斤. 现在你要根据小宝宝的身高体重,给出补充营养的建议. 输 ...