小睿睿的数列-题解

小睿睿的数列

https://ac.nowcoder.com/acm/contest/6944/A

题目描述
小睿睿给了你一个长度为n的数列,他想问你该数列中满足条件(区间内存在某个数是区间内所有数的公因数)的最长区间有多少个
思路:假设当前这个数为公因数,然后向前向后搜,搜过的点不可能存在更长的符合条件的区间了就不用搜了,所以复杂度不高。
代码:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int a[2000005];
int vis[2000005];
int len[2000005];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)scanf("%d",&a[i]);
    for(int i=0;i<n;i++){
        if(vis[i])continue;
        int j=i-1,cnt=1;
        while(j>=0){
            if(a[j]>=a[i]&&(a[j]%a[i]==0||a[j]==a[i]))
                j--,cnt++;
            else break;
        }
        j=i+1;
        while(j<n){
            if(a[j]>=a[i]&&(a[j]%a[i]==0||a[j]==a[i]))
                cnt++,vis[j]=1,j++;
            else break;
        }
        len[cnt]++;
       //printf("%d %d \n",i,cnt);
    }
    for(int i=n;i>=0;i--){
        if(len[i]){
            printf("%d\n",len[i]);
            break;
        }

    }
    return 0;
}
全部评论

相关推荐

06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
我:“加班需要有加班工资。”&nbsp;hr:“为什么?”&nbsp;哈哈哈哈哈哈哈离大谱
juntenor:你确实太理想化了,对社会不了解呀。这个和HR没有关系,这是国内特色,不然怎么还会有外包就这种逆天的存在呢。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务