NC24479. 小睿睿的数列
描述
输入描述
第一行1个整数n,表示数列的长度第二行n个正整数,第i个整数表示数列
输出描述
一行1个整数,表示答案
示例1
输入:
5 1 1 1 1 1
输出:
1
说明:
存在且仅存在最长区间[1,5]满足条件示例2
输入:
5 2 4 7 11 22
输出:
2
说明:
区间分别为:[1,2],[4,5]C++14(g++5.4) 解法, 执行用时: 306ms, 内存消耗: 23372K, 提交时间: 2020-09-02 23:02:33
#include<bits/stdc++.h> using namespace std; int a[2000005]; int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]); int ans1=0,ans2=0,l,r; for(int i=1;i<=n;i=r){ for(l=i-1;l>=1&&a[l]%a[i]==0;l--); for(r=i+1;r<=n&&a[r]%a[i]==0;r++); if(r-l-1>ans1) ans1=r-l-1,ans2=1; else if(r-l-1==ans1) ans2++; } printf("%d\n",ans2); }
C++11(clang++ 3.9) 解法, 执行用时: 264ms, 内存消耗: 23360K, 提交时间: 2020-09-03 21:30:52
#include<stdio.h> int a[2000006]; int main() { int n,ans=0,max=0; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;) { int l=i,r=i; for(;l>=0&&a[l]%a[i]==0;l--); for(;r<n&&a[r]%a[i]==0;r++); if(r-l-1>max) { max=r-l-1; ans=1; } else if(r-l-1==max) { ans++; } i=r; } printf("%d",ans); }