摘要:
原题 链接 解析 设函数f(x)表示长度为x的棒截断次数的期望值. (1) 明显当x<=d时,f(x)=0; (2) 当f(x)>d时,f(x)=1+f(0~d)+f(d~x). 1表示必定要截断一次,f(0~d)表示截断一次后剩下0~d长度时的期望值,f(d~x)表示截断一次后剩下d~x长度时的期 阅读全文
摘要:
原题 题目链接 题目分析 本题可以用线段树来做.线段树的每个区间维护的值如下.(1)该区间的第一段竖直放置时,从该区间头端指向尾端的向量.(2)拼接两个子区间(如果有子区间的话)时,右儿子需要旋转的角度.这里说明一下,当一个子区间被修改时,如果它是父区间的右儿子,则父区间维护的角度不用变,如果它是父 阅读全文
摘要:
原题 题目链接 题目分析 依题意,直接对a,b,c,d四个数列进行枚举有n4个状态,考虑折半枚举.分别枚举a,b的组合和c,d的组合,则枚举情况可缩小为2*n2个状态.先把c,d的枚举结果排序,然后在枚举a,b的组合过程中,假设枚举的a,b组合为a[i]+b[j],只需要在c,d的组合中找大小为-( 阅读全文
摘要:
原题 题目链接 题目分析 先考虑只有一个球的时候,由运动学定理可知有,设t=sqrt(2H/T),kt<=T,当k为偶数时,h=H-(1/2)*g*(T-kt)2,当k为奇数时,h=H-(1/2)*g*((k+1)t-T)2.再考虑当R=0的时候,这时候所有球的投放起点高度都为H,在空中发生碰撞的时 阅读全文
摘要:
原题 题目链接 题目分析 对于N行M列的矩阵,先看看左上角的点,能使该点翻转的有(1,1)、(1,2)和(2,1),无法确定该通过哪个点来翻转(1,1).不妨先确定好第一行的翻转情况,也就是说该不该翻(1,1)和(1,2)已经确定了,则此时只有(2,1)能翻转点(1,1),这时候就能直接判断了,因此 阅读全文
摘要:
原题 题目链接 题目分析 由题意可以知道,对于特定的k,同一个区间反转两次是无意义的,考虑能翻第一头牛的区间只有第一个区间,因此第一头牛直接决定是否要翻转第一个区间,然后问题规模减1,同理再对第二头牛进行同样的分析.这里的翻转操作可以用前缀和优化,设f[i]=1表示以第i头牛开始的区间被翻过,f[i 阅读全文
摘要:
原题 题目链接 题目分析 题目要求一段连续的书页,里面包括了全部知识点,可以考虑尺取,由于知识点的编号无规律,可以考虑用set来记录全部知识点的种数,尺取的过程可以考虑用map来辅助判断区间[s,t]是否包括全部知识点,映射map<知识点编号,个数>,当每种知识点个数至少为1的时候表明[s,t]包含 阅读全文
摘要:
原题 题目链接 题目分析 依题意可以用尺取法,设区间[s,t]内的数的合为sum,当sum<S的时候,t往右延伸直到sum>=S,此时更新答案,在把s往右延伸,再重复操作.当s,t遍历完整个区间时遍得到答案,复杂度为O(n). 代码 阅读全文
摘要:
原题 题目链接 题目分析 题目要求最大最小值,可以考虑二分,C(d)为任意两头牛的距离不小于d.判断方法如下,先按牛舍的x值从小到大排序,然后把第一头牛放在x0,从x1开始遍历,当xn-x0>=d时,则放下第二头牛,以此类推.如果能放下C头牛,则继续二分右区间,否则二分左区间. 代码 阅读全文
摘要:
原题 题目链接 题目分析 依题意,可以考虑二分最大长度,C(x)为能得到K条长度为x的绳子.二分长度判断方法如下,第i段绳子能切下Li/x段长度为x的绳子,统计一下能切下的绳子的数量与K比较即可.控制二分次数达到精度要求即可. 代码 阅读全文