zoukankan      html  css  js  c++  java
  • 2020-05-18 — 习题训练一F

    VJ

    F - Nastya and Door

     题意:把一个门扔到连着的n座山上,门如果掉到山峰上就会断掉成两半。

      某座山的高度比左右的两座山都要高就叫山峰。

      现在给出n座山的高度a[i],求长度为k的区间内峰值最多为多少,并输出这个区间的左端点(区间需要将峰的左边和右边都包括)。

    解题思路:先在[2,k-1]区间求出峰的个数,然后遍历[i,i+k-1]区间峰的个数,求出最大峰值。

    ac代码:

    #include<iostream>
    using namespace std;
    int a[200005];
    int main(){
    	int tt,n,k,i,j,p,l,max,q,m;
    	cin>>tt;
    	while(tt--){
    		cin>>n>>k;
    		for(i=1;i<=n;i++){
    			cin>>a[i];
    		}
    		m=k;
    		p=0;
    		for(i=2;i<m;i++){
    			if(a[i]>a[i+1]&&a[i]>a[i-1]){
    				p++;//计算区间中峰的个数 
    			}
    		}
    		l=2;
    		max=p;
    		q=1;
    		for(i=m;i<n;i++,l++){
    			if(a[i]>a[i+1]&&a[i]>a[i-1]){
    				p++;//从尾向右延伸 
    			}
    			if(a[l]>a[l+1]&&a[l]>a[l-1]&&p){
    				p--;//从头向右延伸 
    			}
    			if(p>max){
    				max=p;
    				q=l;
    			}
    		}
    		cout<<max+1<<" "<<q<<endl;
    	}
    	return 0;
    } 
     
  • 相关阅读:
    MySQL设置用户
    tensorflow学习笔记12
    tensorflow学习笔记11
    tensorflow学习笔记10
    tensorflow学习笔记9
    博雅机器学习十讲10
    博雅机器学习十讲9
    博雅机器学习十讲8
    博雅机器学习十讲7
    博雅机器学习十讲6
  • 原文地址:https://www.cnblogs.com/nanan/p/12924323.html
Copyright © 2011-2022 走看看