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 四道题题解的更多相关文章

  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. Kickstart Round D 2017 problem A sightseeing 一道DP

    这是现场完整做出来的唯一一道题Orz..而且还调了很久的bug.还是太弱了. Problem When you travel, you like to spend time sightseeing i ...

  3. 2019 google kickstart round A

    第一题: n个人,每个人有一个对应的技能值s,现在要从n个人中选出p个人,使得他们的技能值相同. 显然,如果存在p个人的技能值是相同的,输出0就可以了.如果不存在,就要找出p个人,对他们进行训练,治他 ...

  4. Kickstart Round D 2017 : A

    思路: 动态规划. large数据的时间范围很大,无法设计入状态中.转换思路为定义dp[i][j]为当前在景点i,并且已经游览了j个景点所花费的最小时间,这种思想与leetcode45类似.于是转移方 ...

  5. Google Kickstart Round.B C. Diverse Subarray

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

  6. Google Kickstart Round E 2018 B. Milk Tea

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

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

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

  8. # Codeforces Round #529(Div.3)个人题解

    Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...

  9. Google Summer of Code 2017 经验谈

    Google Summer of Code (GSoC) 2018 又要开始了. 如果想实现你心中的开源梦想, 用代码让世界变得更美好. 参加GSoC可能是你进入开源的世界最好途径. GSoC是什么 ...

随机推荐

  1. 记录Datagrid使用的一些事项

    1.将两个列的文本拼接到一起并显示,如列1为name,列2为code,需要显示name(code).如:小明(123) 则初始化datagrid时在columns[]里加入:列1添加formatter ...

  2. Could not get JDBC Connection--java

    postMan上调用合同服务,后台运行错误,如下: { "timestamp": 1536203887641, "status": 500, "err ...

  3. EF Core 生成数据库

       1.运行cmd,切换到打开项目所在文件夹,输入下面的命令 dotnet ef migrations add Initial 建立并初始化数据库 dotnet ef database update ...

  4. lr12关联,响应乱码

    1.前程贷登录.投标脚本 Action() { //    web_url("登录页", //        "URL=http://120.78.128.25:8765 ...

  5. python全栈考题 3.30

    1.执行Python 脚本的两种方式 1.>>python ../pyhton.py      2. >>python.py   #必须在首行有 #!/usr/bin/env ...

  6. ubuntu16.04安装anaconda、环境配置

    anaconda默认3.7降级到3.6 conda install python=3.6 anaconda安装后找不到conda命令: 执行测试命令 conda info -e conda: comm ...

  7. 异常java.lang.NumberFormatException解决

    原因一:超出了int类型的取值范围 项目中要把十六进制字符串转化为十进制, 用到了到了Integer.parseInt(str1.trim(), 16):这个是不是后抛出java.lang.Numbe ...

  8. 较为复杂的实现Parcelable的子类--推荐Android中使用

    2017-08-14 21:23:34 一个较为复杂的Parcelable实现类 public class CommentShareBean implements Parcelable { /** * ...

  9. 第二章01:Hello world 案例

    java程序开发 = 三部曲 源文件+编译器+字节码文件+解释器=结果 源文件:编写Java源文件(我们也称之为源代码文件),它的扩展名为.java: 编译:然后通过编译器把源文件编译成字节码文件,字 ...

  10. SVG路径path的贝塞尔曲线指令

    深度好文分享: http://www.zhangxinxu.com/wordpress/2014/06/deep-understand-svg-path-bezier-curves-command/ ...