zoukankan      html  css  js  c++  java
  • 51nod 1285 山峰和分段

    【题解】

      枚举n的各个因数作为段长,O(n)判断每一段内是否有山峰即可。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 #define LL long long
     6 #define rg register
     7 #define N 1000010
     8 using namespace std;
     9 int n,m,ans,a[N];
    10 bool p[N];
    11 inline int read(){
    12     int k=0,f=1; char c=getchar();
    13     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    14     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    15     return k*f;
    16 }
    17 inline bool check(int x){
    18     int last=1,now=x;
    19     while(now<=n){
    20         bool ok=0;
    21         for(rg int i=last;i<=now;i++) ok=ok|p[i];
    22         if(!ok) return 0;
    23         now+=x; last+=x;
    24     }
    25     return 1;
    26 }
    27 int main(){
    28     n=read(); m=trunc(sqrt(n));
    29     for(rg int i=1;i<=n;i++) a[i]=read();
    30     for(rg int i=2;i<n;i++) if(a[i-1]<a[i]&&a[i]>a[i+1]) p[i]=1;
    31     for(rg int i=1;i<=m;i++)if(n%i==0){
    32         if(check(i)) ans=max(ans,n/i);
    33         if(check(n/i)) ans=max(ans,i);
    34     } 
    35     printf("%d
    ",ans);
    36     return 0;
    37 }
    View Code

      

  • 相关阅读:
    字符串 高精度计算
    JAVA Socket编程 课堂作业
    图论 Floyd算法
    天梯赛题解 L1-049 天梯赛座位分配
    天梯赛题解 -L1-039 古风排版
    HDU 5558 后缀数组
    HDU 6194 后缀数组
    HDU 5769 后缀数组
    HDU 4691 后缀数组+RMQ
    HDU 4135 容斥原理
  • 原文地址:https://www.cnblogs.com/DriverLao/p/9657182.html
Copyright © 2011-2022 走看看