首页 > 其他 > 详细

cf891a Pride

时间:2018-01-21 23:47:53      阅读:296      评论:0      收藏:0      [点我收藏+]

倘若存在 1,那么答案是 \(n-cnt_1\)
否则,设最短的公约数为 1 的区间长度为 \(minlen\),答案是 \(minlen-1+n-1\)

#include <iostream>
#include <cstdio>
using namespace std;
int n, ans, gcd[2005][2005], cnt;
int getGcd(int x, int y){
    return !y?x:getGcd(y, x%y);
}
int getAns(){
    if(cnt) return n-cnt;
    for(int l=2; l<=n; l++)
        for(int i=1; i<=n-l+1; i++){
            int j=i+l-1;
            gcd[i][j] = getGcd(gcd[i][j-1], gcd[j][j]);
            if(gcd[i][j]==1)    return n+l-2;
        }
    return -1;
}
int main(){
    cin>>n;
    for(int i=1; i<=n; i++){
        scanf("%d", &gcd[i][i]);
        if(gcd[i][i]==1)    cnt++;
    }
    ans = getAns();
    cout<<ans<<endl;
    return 0;
}

cf891a Pride

原文:https://www.cnblogs.com/poorpool/p/8325801.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!