ovo的憨憨题解

发布时间:2019-10-19 21:28:06
贴主:ovo
热度:3
正在讨论:P1109 - 分解整数 题目传送门

ovo 2019-10-19

题目解释:

1.输入整数m,求是否存在整数p,使得p*(p+2)=m成立

2.p可以为0和负数

3.p*(p+2)的最小值为-1


所以只要对m分类讨论即可

1.m<-1时,由于p*(p+2)的最小值为-1,所以无解,输出false

2.m==-1时,只有当p=-1时,(-1)*1=-1一解,输出-1

3.m>-1时,由于m=p*(p+2)=p^2+2p,所以√m>=p,所以我们可以从√m往前找找出p,使得p*(p+2)=m成立

    同理,(-p)*(-p-2)=m也成立,即-p-2也是一解,输出两解即可


如果有更好的算法感谢dalao提供qwq

(0)

他怎么这么猛啊 2019-10-20

实际上我们可以观察到若令t=p-1

则p*(p+2)=(t-1)*(t+1)=t^2-1

这个时候直接计算sqrt(m+1)的正负值是否为整数即可

但都是O(1)

还是ovo大佬强啊%%%%%%

(0)

关注鲤鱼Liyuu喵 2019-11-03

我的话是这题就是x=p(p+1)的一元二次。

x已知,如果是一个一元二次一定只有三种可能,无解一个解两个解。

我第一就考虑了当x=0时,只有0和-2这两个解,所以得判断到幅度差为2。

所以我的办法是让i从1开始判断到x+2,再让i从-1开始判断到-x-2。如果满足就记录,然后跳出。

有就输出 都没有就F。

为什么不会有两个正解或两个负解呢。因为题目只要求输出满足的整数,没说小数。

那用求解公式算化简完能发现如果同时有两解一定是两个小数。

所以就不用考虑那么麻烦了,正数判断一遍负数判断一遍就完事了。



(0)

Copyright 2016 - 2024 XUJC ACM Team
闽ICP备2020022076号-1