1 条题解

  • 0
    @ 2026-10-18 20:21:04

    首先仔细观察会发现b数组根本没有用到,所以只用输入bb数组,不用计算bb数组,只用看aa数组就行了,因为gcd(a1,a2,a3)=gcd(gcd(a1,a2),gcd(a2,a3))gcd(a_1,a_2,a_3)=gcd(gcd(a_1,a_2),gcd(a_2,a_3)) 所以只要维护一个数,与它相邻的数的gcdgcd不变就行了,这个数最小的情况下就是与它相邻的数gcdgcd的最小公倍数。

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll t,n;
    ll a[200010];
    ll b[200010];
    int main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	cout.tie(0);
    	cin>>t;
    	while(t--){
    		cin>>n;
    		for(int i=1;i<=n;i++){
    			cin>>a[i];
    		}
    		for(int i=1;i<=n;i++){
    			cin>>b[i];
    		}
    		ll sum=0;
    		for(int i=2;i<n;i++){
    			ll u=__gcd(a[i],a[i+1]);
    			ll v=__gcd(a[i],a[i-1]);
    			ll w=u*v/__gcd(u,v);
    			if(w<a[i]){
    				sum++;
    				a[i]=w;
    			}
    		}
    		if(a[1]!=__gcd(a[1],a[2])){
    			sum++;
    		}
    		if(a[n]!=__gcd(a[n],a[n-1])){
    			sum++;
    		}
    		cout<<sum<<"\n";
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1244
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    14
    已通过
    3
    上传者