摘要: 题意:要把一块n*m*k的巧克力分成1*1*1的单元,有两种操作方式:1,用手掰(假设力量无穷大),每次拿起一块,掰成两块小的;2,用刀切(假设刀无限长),可以把多块摆在一起,同时切开。问两种方式各需多少次操作才能完成任务。分析:用手掰很明显是(n*m*k-1)次操作。用刀切注意不是((n-1)+(m-1)+(k-1))次操作,这只是不动原巧克力的操作数。举个例子:1*1*4的巧克力,用刀切,按上面说的要3次操作,实际上只需2次。所以不管是长宽高,都只需要[log2n](或m,k)次操作。注意:数据范围上限是2000,n*m*k后超出231的范围,__int64 1 #include 2 #i 阅读全文
posted @ 2013-10-04 19:54 Thousand Sunny 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题意:已知起点、圆、矩形,要求计算从起点开始,经过圆(和圆上任一点接触即可),到达矩形的路径的最短距离。(可以穿过园)。分析:没什么好的方法,凭感觉圆上的每个点对应最短距离,应该是一个凸函数,用三分来解。不过应该是分成两部分,用两次三分来解。具体原因不明,通过实验只能得出三分必须是针对一个凸函数,很明显,从0~2*pi不是一个凸函数,但同理,0~pi,pi~2*pi也不一定是个凸函数。个人认为,网络上流传的[0,pi][pi,2*pi]这种分法,并不存在合理性。继续思考= = 另外,直接暴力枚举也是能过的。错误:分析圆上的点与矩形的位置关系写挫了,虽然现在还是研究不明白到底出了什么问题,应.. 阅读全文
posted @ 2013-10-04 19:42 Thousand Sunny 阅读(232) 评论(0) 推荐(0) 编辑