cf 620C Pearls in a Row(贪心)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf 620C Pearls in a Row(贪心)相关的知识,希望对你有一定的参考价值。

d.有一串数字,要把这些数字分成若干连续的段,每段必须至少包含2个相同的数字,怎么分才能分的段数最多?

比如 是1 2 1 3 1 2 1

那么 答案是

2
1 3
4 7

即最多分在2段,第一段是1~3,第二段是4~7。

即分成这2段:1 2 1,3 1 2 1

 

s.很不错的一道贪心的题。当时没怎么细想,后来看了tourist的代码后得知。

可以证明,满足贪心选择性质和最优子结构性质。

贪心策略是:从前向后遍历,每次选择最小长度的符合条件的段。

 

c.

技术分享
#include<iostream>
#include<stdio.h>
#include<set>
using namespace std;

#define MAXN 312345

int a[MAXN];

int _start[MAXN];
int _end[MAXN];

int main(){

    int n;
    set<int> existed;
    int cnt;
    int start;

    while(~scanf("%d",&n)){
        existed.clear();

        for(int i=0;i<n;++i){
            scanf("%d",&a[i]);
        }

        cnt=0;
        start=0;
        for(int i=0;i<n;++i){
            if(existed.find(a[i])!=existed.end()){
                _start[cnt]=start;
                _end[cnt]=i;
                ++cnt;

                existed.clear();
                start=i+1;
            }
            else{
                existed.insert(a[i]);
            }
        }

        if(cnt==0){
            printf("-1
");
        }
        else{
            _end[cnt-1]=n-1;
            printf("%d
",cnt);
            for(int i=0;i<cnt;++i){
                printf("%d %d
",_start[i]+1,_end[i]+1);
            }
        }
    }

    return 0;
}
View Code

 

以上是关于cf 620C Pearls in a Row(贪心)的主要内容,如果未能解决你的问题,请参考以下文章

Pearls in a Row CodeForces 620C 水题

hbase shell 常见命令

codeforces 620C

[ 9.22 ]CF每日一题系列—— 484A Bits

HDU 5090 Game with Pearls

hdu 1300 Pearls(dp)