1034. 二哥的金链

Description

一个阳光明媚的周末,二哥出去游山玩水,然而粗心的二哥在路上把钱包弄丢了。傍晚时分二哥来到了一家小旅店,他翻便全身的口袋也没翻着多少钱,而他身上唯一值钱的就是一条漂亮的金链。这条金链散发着奇异的光泽,据说戴上它能保佑考试门门不挂,RP++。好心的老板很同情二哥的遭遇,同意二哥用这条金链来结帐。虽然二哥很舍不得这条金链,但是他必须用它来付一晚上的房钱了。

金链是环状的,一共有 N 节,老板的要价是 K 节。随便取下其中 K 节自然没问题,然而金链上每一节的 RP 值其实并不一样,有高有低,二哥自己非常清楚。另外二哥并不希望把整个金链都拆散了,他只愿意在这条环形的金链上切两刀,从而切下一段恰好为 K 节的金链给老板。因为 RP 值越高的节越稀有,因此他希望给老板的金链上最高的 RP 值最小。

Input Format

第一行两个整数 N 和 K,表示金项链有 N 节,老板要价 K 节。

第二行用空格隔开的N个正整数 a1...aN ,表示每一节金链的价值为多少。

Output Format

输出一个整数,表示二哥给老板的金链上最高的 RP 值最小多少。

Sample Input

5 2
1 2 3 4 5

Sample Output

2

Sample Input

6 3
1 4 7 2 8 3

Sample Output

4

说明

对40%的数据,3N200

对70%的数据,3N20000

对100%的数据,3N200000

, 0<ai109

数据规模较大,建议用scanf("%d", &a[i]);来读数据。

 

 

 

 


 

    #include <iostream>
    #include <stdio.h>
    #include <algorithm>
    #include <vector>

    using namespace std;

    int min_value(int chain[], int n, int k){
        vector<int> vchain(chain,chain+n);
        vector<int>::iterator start = vchain.begin();
        int res = 10000000001, sub_max;
        while(start+k<=vchain.end()){
            vector<int>::iterator iter = max_element(start,start+k);
            sub_max = *iter;
            start = iter + 1;
            res = min(sub_max, res);
            //cout<<*start<<" "<<sub_max<<endl;
        }
        return res;
    }

    int main() {
        int n,k;
        cin>>n>>k;
        if(k>n)
            return 0;
        int chain[n];
        for(int i=0;i<n;i++){
            scanf("%d",&chain[i]);
        }
        int elem_max_1 = min_value(chain,n,k);

        int chain_cir[2*(k-1)];
        int j = 0;
        for(int c = n-k+1;c<n;c++){
            chain_cir[j++] = chain[c];
        }
        for(int s = 0;s<k-1;s++){
            chain_cir[j++] = chain[s];
        }
        int elem_max_2 = min_value(chain_cir, 2*(k-1), k);

        cout<<min(elem_max_1,elem_max_2);

        return 0;
    }

 

转载于:https://www.cnblogs.com/bernieloveslife/p/7966907.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值