51NOD 1285 山峰和分段
2016-09-17 11:21
183 查看
1285 山峰和分段 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 用一个长度为N的整数数组A,描述山峰和山谷的高度。山峰需要满足如下条件, 0 < P < N - 1 且 A[P - 1] < A[P] > A[P + 1]。 以上图为例,高度为:1 5 3 4 3 4 1 2 3 4 6 2。 现在要将整个山分为K段,要求每段的点数都一样,且每段中都至少存在一个山峰,问最多可以分为多少段。 Input 第1行:一个数N,表示数组的长度(1 <= N <= 50000)。 第2 - N + 1行:每行1个数Ai(1 <= Ai <= 10^9)。 Output 输出最多可以将山分为多少段。 Input示例 12 1 5 3 4 3 4 1 2 3 4 6 2 Output示例 3
首先 将n划分为t段 每段有k个点
必定有n%k==0
暴力跑一遍 发现 对任意i<=n
i的约数不超过98个
if(a[i]>a[i+1]&&a[i]>a[i-1]) b[i]=1; else b[i]=0;
sum[i]表示b的前i项和
如果sum[k]-sum[0]>0,sum[2k]-sum[k]>0,….,sum
-sum[n-k]>0 则可以为分成t=n/k段
显然 每次检测能否分成t段 复杂度为O(n/k)
所以 直接穷举k即可
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<string> #include<vector> #include<deque> #include<queue> #include<algorithm> #include<set> #include<map> #include<stack> #include<time.h> #include<math.h> #include<list> #include<cstring> #include<fstream> #include<bitset> //#include<memory.h> using namespace std; #define ll long long #define ull unsigned long long #define pii pair<int,int> #define INF 1000000007 const int N=50000+5; int a ; int sum ; void init(int n){ for(int i=1;i<=n;++i) scanf("%d",a+i); for(int i=2;i<=n-1;++i) if(a[i]>a[i-1]&&a[i]>a[i+1]) sum[i]=1; for(int i=2;i<=n;++i) sum[i]+=sum[i-1]; } bool check(int k,int n){ for(int t=k;t<=n;t+=k) if(sum[t]-sum[t-k]==0) return false; return true; } int Search(int n){ int res=sum ; for(int i=res;i>0;--i) if(n%i==0) if(check(n/i,n)) return i; return 0; } int main() { //freopen("/home/lu/文档/r.txt","r",stdin); //freopen("/home/lu/文档/w.txt","w",stdout); int n; scanf("%d",&n); init(n); printf("%d\n",Search(n)); return 0; }
相关文章推荐
- 【Hello 2017】 51nod 1285 山峰和分段【暴力】
- 51nod 1285 山峰和分段
- 51nod 1285 山峰和分段
- 51Nod 1285 山峰和分段
- 51nod 1285 山峰和分段
- 51nod 1285 山峰和分段
- 51nod 1285 山峰和分段
- 51nod 1285 山峰和分段 -查找
- 1285 山峰和分段
- 51nod-1281 山峰和旗子
- [排列组合 + 分段打表] 51nod 算法马拉松25 A. 二分答案
- 51nod 1281 山峰和旗子
- 51Nod-1281-山峰和旗子
- 山峰和分段
- 51Nod-1285-山峰和分段
- 51Nod 1281 山峰和旗子
- 51nod 1281 山峰和旗子【二分+dp】好题~
- 51nod 1315 合法整数集
- 1066 Bash游戏(51NOD基础题)
- 51Nod-1197-字符串的数量 V2