先一些题外话--..
Notice(精简)
(1)变量重名了,有可能会让map用不来,那是因为你先cin了一个m。。。
(2)0x3f3f3f3f有四个,我的分。。
atcoder一场。 。。。竟然是因为endl。。。 感觉不打的话水平真的会下降啊。。
好了,疯狂错不止,结果不是set里面,而是for循环少写了。
怎么这么一丁点东西,会错这么严重?仅仅是因为是和数字相关的吗?
有一个重要的原因就是,发现错了之后,我只是在进行简单的修补,并没有重新思考。
这也是很多情况下一错再错的原因吧。。
【经过思考】---还不断告诉自己这是修炼的过程....
随后想到: 先排序看24 48(插入x之后看一堆间距是否符合) 如果最小的能满足就找大的去 如果不行就在剩下的地方二分。
【经过题解】其实要转换成数学啊,【就是---】每个点距离x的最大公约数。
然后每次都gcd一下其实就可以解决了(从h=gcd(b[0],b[1])开始...) 因为我们其实只要一个gcd的答案-.-
大概就是修养吧,300分的难度
再来复习一下:int GCD(int a,int b){return b==0?a:GCD(b,a%b);}
int gcd(int a,int b) {return b==0?a:gcd(b,a%b);}
【再其实】思路被卡死了啊。。完全没往数学想了。。
经过我的分析。可能题目会给一些误解
显而易见的是:题目中-> 看起来和起始点无关,和这个点到x的位置有关。
那么有一些错误的方向是----把x当做一个点插进去、直接计算a[i-1] a[i]
第一个暂且不说,第二个其实可以和a[i]到x的距离合并了.....
想问题真的要想全啊吧........
1其实需要什么呢,分析能分析得来,的确是要找能除得尽的那些&……%¥#@
最开始想能除得尽的用二分来做,肯定有的是不满足的。(12可以,24可以,二分会把中间也分到,于是就错掉了)
那就前面间距当标签,12不满足 ,1 2总可以吧,上面实验,下面二分
其实这里应该想一个往数学方面的转化,就是那个最大公约数。
这已经不是在无规律的试探底线合适范围了,增加的规律有倍数,可以试试数学。
我最后写了个代码。【我也不知道这样是在干嘛……总之练练脑子吧,各种,各种解决问题的能力】/哪怕是用来小小的证明寄几(?)
#include<iostream>
#include<algorithm>
using namespace std;
int n,x;
const int maxn=100005;
int a[maxn];
int d[maxn];
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
int main(){
cin>>n>>x;
int aa;
for(int i=1;i<=n;i++){
cin>>aa;
d[i]=abs(aa-x);//只要差值,gcd
}
if(n==1)cout<<abs(x-aa)<<endl;
else{
int h=gcd(d[1],d[2]);
for(int i=3;i<=n;i++){
h=gcd(h,d[i]);
}
cout<<h<<endl;
}
return 0;
}
emmm,别忘了abs
18-9-28
-----------以下为转载知识点 https://blog.csdn.net/L_apple8/article/details/52525752
- 0x3f3f3f3f的十进制是1061109567,也就是10^9级别的(和0x7fffffff一个数量级),而一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用而不致出现数据大于无穷大的情形。
- 另一方面,由于一般的数据都不会大于10^9,所以当我们把无穷大加上一个数据时,它并不会溢出(这就满足了“无穷大加一个有穷的数依然是无穷大”),事实上0x3f3f3f3f+0x3f3f3f3f=2122219134,这非常大但却没有超过32-bit int的表示范围,所以0x3f3f3f3f还满足了我们“无穷大加无穷大还是无穷大”的需求。
- 最后,0x3f3f3f3f还能给我们带来一个意想不到的额外好处:如果我们想要将某个数组清零,我们通常会使用memset(a,0,sizeof(a))这样的代码来实现(方便而高效),但是当我们想将某个数组全部赋值为无穷大时(例如解决图论问题时邻接矩阵的初始化),就不能使用memset函数而得自己写循环了(写这些不重要的代码真的很痛苦),我们知道这是因为memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0,现在好了,如果我们将无穷大设为0x3f3f3f3f,那么奇迹就发生了,0x3f3f3f3f的每个字节都是0x3f!所以要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。