A-孤独的数组_牛客小白月赛48 (nowcoder.com)
题意:
思路:
对一个数乘k,对它和其他数的gcd是没有贡献的,因此它乘了和没乘是一样的
因此这个数组要不本身就是个孤独数组,要不就是不能变成孤独数组
那么去模拟一遍看一下是不是孤独数组即可
Code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mxn = 1e5+10;
int a[mxn], judge=0;
int gcd(int a, int b){
return b ? gcd(b,a%b):a;
}
int main(){
int n;
cin >> n;
for (int i=1;i<=n;i++) cin>>a[i];
for(int i=2;i<=n;i++){
if (gcd(a[i-1],a[i])!= 1) judge = 1;
}
if(judge) cout<<-1<< endl;
else cout<<0<<endl;
return 0;
}
总结:
看到gcd(a,b)=1,可以条件反射想到以下:
1.gcd(a,b)=gcd(b,b-a) (这样就能转化为差分数组了)
2.a和b除了1和它们本身没有共同因子
3.相邻两数之间gcd一定为1
4.设gcd(a,b)=k,然后就可以去简化关于gcd的式子了