一道尚未评定的水题

更好的阅读体验

思路

来分析分析样例:

3
-5 10 5



我们把它升序排列,会得到这个东西↑

不仔细地观察后可以发现:加一个(0,0)的点显然是最优的

再用脚趾头想想为什么,我们发现,这题题意就是想让我们把一段线段x等分,使得给出的点都是它的x等分点。

而通过我们的敏锐的第六感做题经验,不难看出最优解即相邻点距离的最大公约数

做法

显然此题难点在于求n个数的gcd

而要求多个数的gcd,两两求之后合并即可。

证明:

以三个数为例,设有a,b,c三数,x=gcd(a,b),y=gcd(x,c),因为a%x=0,x%y=0,所以a%y也等于零,且y是符合条件的最大值。

所以我们可以递推求n个长度的gcd,然后出解即可

代码

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int a[100001];
int b[100001];
int main()
{
int n;
cin >> n;
for ( int i = 1; i <= n; i++ )
{
cin >> b[i];
}
sort ( b + 1, b + n + 1 );
for ( int i = 2; i <= n; i++ )
a[i] = b[i] - b[i-1];
int dis = b[n] - b[1];
for ( int i = 2; i <= n; i++ )
{
a[i] = __gcd( a[i], a[i-1] );
//在<cmath>里的神奇函数(妈妈再也不用担心我不会辗转相除啦!)
}
cout << dis / a[n] - n + 1;
/*此时的a[n]即为最优的线段长度,dis/a[n]为线段个数,
再加1是点的个数,最后减去原有的n个点,输出*/
return 0;
}

完美收官(你们没发现开头的链接是两个吗)

最新文章

  1. 简述cookie
  2. appcan切换帐号无法提交SVN
  3. 第52课 C++中的抽象类和接口
  4. Nginx/LVS/HAProxy负载均衡软件的优缺点详解
  5. 《javascript高级程序设计》对象图
  6. foreach遍历对象的属性
  7. java课设-计算数学表达式的程序,201521123050,51 团队
  8. Mysql高可用架构(主从同步)
  9. 『备注』&amp;#x; 格式 的编码转换
  10. 为啥程序会有bug?
  11. Django模板语言初识
  12. java获取客户端ip地址工具类
  13. Python 中if __name__ == &#39;__main__&#39;: 的作用和原理
  14. Ubuntu下安装tomcat
  15. Windows PowerShell 入門(1)-基本操作編
  16. NOIP2016 巨凉无比的感言
  17. linux设置开机自启动
  18. python列表操作方法
  19. QtCore.QMetaObject.connectSlotsByName:根据objectName和signal自动绑定slot
  20. HDU 1592 Half of and a Half(大数)

热门文章

  1. tensorflow 案例
  2. Nginx 配置访问本地目录
  3. Nginx之keepalived高可用工具
  4. 死磕java(3)
  5. Pycharm2018.3.5永久破解
  6. AI产品经理工作流程——需求分析和产品设计
  7. Codeforces 1065C Make It Equal (差分+贪心)
  8. Grafana &amp; Graphite &amp; Collectd:监控系统
  9. 题解 NOI2004【郁闷的出纳员】
  10. 转AngularJS路由插件