Codeforces Round #387(div 2)

A

=w=

B

VOV

C

QoQ

D

题意:贝尔兰冬天很冷,那么司机要换上冬天专用轮胎才能开车。假设冬天一共有n天,有一套冬天专用轮胎,仅能使用k天,这套轮胎不管什么温度都能用,而夏天用的轮胎只能在温度非负的日子里使用,问要平安开n天的车最少需要换几次轮胎(穿上和脱下都算)

分析:贪心

  贪心想法很好得出,按照连续夏天的长度来排序,小的先来填

  但要注意头尾两段

  如果填补开头一段夏天,不能使结果最优,所以开头认为放在区间数组的最后

  至于最后一段夏天,有一点很尴尬,也就是别的区间如果填满,对结果的贡献是-2,而最后个区间贡献是-1,这就涉及到价值和花费问题,所以有两种可能,一种是将最后的区间放入前面区间排序,一种是将最后的区间放在倒数第二个(倒数第一个是第一个区间),比较两种情况的最小值输出

  以一种奇葩的姿势A了这题,期待有比较正统的贪心

E

题意:给出一种树的构造方式,让你按照深度将树输出

分析:模拟

  就是模拟建树就行了,类似于对中缀表达式进行操作

F

题意:输入一个k和一个t(k<=2e9,t<=10),要求输出第k小的满足要求的16进制数,满足的要求是该16进制数各个位上的数出现次数<=t

分析:数位DP

  明显的数位DP

  不断枚举位数len,dp出位数为len时候有多少个满足的数,然后就能确定该数的位数,输出时候从高位开始填,确定是哪个数

  具体的dp:f[i][j]表示前i个数字,将长度为len的位置已经填了j个(0可以为首位)的方案数

  f[i][j]=Σf[i-1][j-k]*c(len-j+k,k) 其中每个数字都有num[i]表示每个数字最多使用个数(刚开始都是t),这样做是因为要枚举最高位,所以就导致有一个数能用的个数会少一个

  注意:1、写数位DP过程的时候一定不要考虑首位是不是0的情况,因为输出的时候绝对需要枚举最高位

     2、用long long

posted @ 2017-01-08 23:10  Chellyutaha  阅读(120)  评论(0编辑  收藏  举报