2018年8月5日训练日记

HDU 5364 Distribution money(思维)只需要统计是否有一个数出现超过n/2次。

HDU 5365 Run(思维)结论:整点不能构成正三、五、六边形。然后四边形只需要枚举平行于x,y轴的情况,和对于定点(i,j),k,r>=1,则(i,j+k) (i+r,j) (i+r+k,j+r) (i+k,j+k+r) 是一个正方形。

HDU 5366 The mook jong(推公式) dp[i]=dp[i-1]+dp[i-3]+1。dp[i]的含义是到i这个位置为止,有多少种方案数,也就是答案。   因为dp表示的是合法的解,所以之前一定已经至少放了一个木桩了。即dp[i] = i这个位置不放的方案总数 + i这个位置放的方案总数。

i这个位置不放的方案总数=dp[i-1]

i这个位置放的方案总数 = i这个位置放上去合法的方案总数 = i-1,i-2位置都不放,i-3之前的方案总数(即dp[i-3]) + i-1之前所有点都没放过,就这个i点放了一个 = dp[i-3]+1

因此 dp[i]=dp[i-1]+dp[i-3]+1。

HDU 5367 digger(线段树)连续大小一样的数被称为山,必须在它的左边和右边都有比它矮的山时,它被称为高山,给出q个操作,操作是把区间都加上一个数,输出全部高山的总长度。线段树区间合并的题目,暂时没看懂,留坑待补。

HDU 5370 Tree Maker(卡特兰数+dp)大小为k的二叉树的方案数=卡特兰(k)。然后dp求出用j个节点构成i棵可以为空的子树的方案数f[i][j],然后在树上走一遍然后统计即可。然后不会dp。。。

HDU 5371 Hotaru's problem(马拉车算法)求234 432 234这样的子序列的最长长度。显然234 432  和432 234都是回文串,于是用manacher算法求出每个以 i 为中心和以 i和i+1 为中心的最长回文串长度。然后本题满足条件的只有i和i+1为中心的最长回文串长度,在纸上画画发现x>max&&p[i+x]>=x时符合条件(x=p[i]-1),否则看 --x,直到满足条件或者小于max。顺便重新整理了模板。

HDU 5372 Segment Game(树状数组)两种操作,插入一条线段,长度为插入操作数,删除操作数为i的线段。求每次插入操作有多少条线段被该线段完全覆盖。由于插入的线段长度递增,因此插入一条线段时,右端点<=它的线段总数 - 左端点<它的线段总数 就是答案。维护两个树状数组单点更新区间查询即可。

HDU 5373 The shortest problem(模拟)当一个数的奇数位之和与偶数位之和的差的绝对值能被11整除,那么该数就可以被11整除。根据题意再模拟一下加数操作就行了,注意当前位是奇位还是偶位与当前总长度有关。

HDU 5374 Tetris (模拟俄罗斯方块)给你一堆操作序列和方块种类数,让你模拟俄罗斯方块。输出最终消了多少行。这道模拟题要是写起来不少于2小时。。。只看了题解,就是大模拟。用一个数组保存 所有形状 所有状态下 四个点的相对位置,每进行一次操作时,判断是否合法(越界,重叠),下落时判断是否重叠 ,如果重叠则不动 将方块加入地图,消行,换下一个方块继续。

HDU 5375 Gray code(简单dp)格雷码就是这一个数二进制的i为和i-1位异或的值,如果等于1就获得a[i]的值。状态转移方程为  dp[i][0]=max(dp[i-1][0],dp[i-1][1]+a[i]);
dp[i][1]=max(dp[i-1][1],dp[i-1][0]+a[i]);

顺便补了牛客第六场多校的C题。只需要求不重复的方案数即可。C(m,k)*k*C(n-1,k-1)*(k-1)!,化简之后就可以得到公式了。然后一堆取模,每一步都要取模。。。明天继续加油。

展开阅读全文

没有更多推荐了,返回首页