Codeforces Beta Round #2

转载hhang大牛的blog。。。

A – Winner

这个比较简单 ,Pass,简单迭代

B. The least round way

1000*1000的方阵,每个格子有一个非负整数,现在要从左上走到右下,每次只能向下或者向右走。目标是使得所有走的格子里的数的乘积里,末尾0的个数最少,要求输出最有解和走法。

不用怎么想也知道基本是个dp了,可以发现其实只有2和5的因子是有用的,但是如果状态同时记录2和5的因子个数的话,就不好表示了。其实方法很简单,对2个5分别做一次,第一次让2尽量少,第二次让5尽量少,两个里面取个最小的就是答案了,应该不难证明。dp过程就比较普通了,记录下路径,最后输出即可,不再赘述。

当然,本题是有一个比较大的trick的,就是如果其中有一个数字为0,那么最后的乘积可以为0,也就是答案至少可以是1。因此,只要先记录下方阵中有没有0,然后dp的时候强制不走0,最后输出走0和不走0的最优解即可。赛后我还测了一下,数据走没有一定要走0的数据,比较弱。

 

C. Commentator problem

二维平面有3个圆,现在要求一个点,这个点看3个圆的视角一样大,其中点看圆的视角就是点和圆的两条切线之间的夹角。有多个点满足条件的话,输出使得视角较大的那个点。

首先考虑到两个圆的视角相同的点会满足什么性质。假设两个圆的半径分别是r1和r2,点到两个圆的距离分别是d1和d2,那么一定满足d1/r1 = d2/r2,即d1/d2 = r1/r2,到两定点距离比为定值的点的轨迹。通过google(-_-),我发现,当r1=r2时,轨迹是一条直线,否则轨迹是一个圆。于是剩下的问题就是苦力几何了,求出轨迹的圆和直线等,然后求出3个东西的公共交点即可

 

收益匪浅!对比较复杂的过程就是要熟!这样子才能有创新!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值