码迷,mamicode.com
首页 > 其他好文 > 详细

cf891a Pride

时间:2018-01-21 23:55:26      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:span   str   using   约数   int   clu   cpp   line   cin   

倘若存在 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

标签:span   str   using   约数   int   clu   cpp   line   cin   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!