51nod 1285 山峰和分段
来源:互联网 发布:点读包音频切割软件 编辑:程序博客网 时间:2024/05/16 12:16
用一个长度为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示例
12153434123462
Output示例
3
遍历判断有多少个顶点并记录,然后判断,他说每一段一样,如果不能整除直接跳过
有答案出来就break; 注意只要有顶点答案默认为1,没有顶点默认为0。
代码献上:
#include<iostream>#include <algorithm>#include <string.h>#include <string>#include <cstdio>#include <stack>#include <set>using namespace std; int shan[50000],ding[50000],i,j,n,sum=0,lon,ans=1,ok=1,k;int chaxun(int start,int wei){ int i=0; for(i=start;i<wei;i++) if(ding[i]==1) return 1; return 0;}int main(){ memset(ding,0,sizeof(ding)); scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&shan[i]); for(j=1;j<n-1;j++) { if(shan[j]>shan[j-1]&&shan[j]>shan[j+1]) { ding[j]=1; sum++; } } //cout<<sum; if(sum==0) { cout<<"0"; return 0; } while(sum>0) { if(n%sum!=0) { sum--; continue; } ok=1; lon=n/sum;//一段的长度 for(i=0;i<n-1;i+=lon) { if(chaxun(i,i+lon)==0) { ok=0; sum--; break; } } if(ok==1) { ans=sum; break; } sum--; } cout<<ans; return 0;}
阅读全文
0 0
- 51nod 1285 山峰和分段
- 51NOD 1285 山峰和分段
- 51nod 1285 山峰和分段
- 51Nod 1285 山峰和分段
- 51nod 1285 山峰和分段
- 51nod 1285 山峰和分段
- 51nod 1285 山峰和分段
- 51nod 1285 山峰和分段 -查找
- 51Nod-1285-山峰和分段
- 【Hello 2017】 51nod 1285 山峰和分段【暴力】
- 1285 山峰和分段
- 51nod-1281 山峰和旗子
- 51nod 1281 山峰和旗子
- 51Nod 1281 山峰和旗子
- 51Nod-1281-山峰和旗子
- 51nod 1281 山峰和旗子【二分+dp】好题~
- 51nod oj 1281 山峰和旗子【打表+枚举判断】
- 51NOD1281 山峰和旗子 【二分】
- POJ 2251
- Codeforces Round #177 (Div. 2)
- 常见浏览器兼容性问题与解决方案
- react的map遍历
- 第七届河南理工大学程序设计大赛(正式赛)D题
- 51nod 1285 山峰和分段
- 剑指Offer [07] 斐波那契数列
- 短时平均能量
- 《程序员的修炼之道》笔记——5、你的知识资产
- I/O流学习--InputStream下的常用方法
- Your pip version is out of date, please install pip >= 9.0.1.
- spring test集成resteasy mock单元测试
- 成员变量的隐藏
- setfacl使用