• 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
  • 相关阅读:
    Liunx服务器部署MySQL
    TCP/IP协议与Http、RPC和Socket
    InfluxDB简介
    nodeJS中的包
    什么是Solr,它能为我们解决什么问题,怎么用?
    tp基础补充
    用户流程
    已有模板与tp框架的结合 (前台)
    tp模板基础
    Smarty小结提纲
  • 原文地址:https://www.cnblogs.com/gongpixin/p/5152441.html
Copyright © 2020-2023  润新知