• 【尺取法】Jessica's Reading Problem


    • Step1 Problem

    原题
    一个人复习一本书,这本书的每一页都有一个知识点ai,每一页的知识点可能会与其他页的知识点相同,问你如何读最少页,将所以知识点读完。

    • Step2 Ideas:

    尺取法通常是指对数组保存下一对下标(起点、终点),燃豆很具实际情况交替推进两个端点直到得出答案的方法。确定下知识点的个数,便用尺取法推进得到答案。

    • Step3 Code:
    #include<iostream>
    #include<stdio.h>
    #include<iomanip>
    #include<queue>
    #include<algorithm>
    #include<cstring>
    #include<map>
    #include<cmath>
    #include<set>
    #define mem(a,x) memset(a,x,sizeof(a));
    using namespace std;
    typedef long long ll;
    const int inf = 0x3f3f3f3f;
    const ll INF = 0x3f3f3f3f3f3f3f3f;
    const int maxn = 1e5+5;
    set<ll> se;
    map<ll, ll> ma;
    ll a[maxn];
    
    int main()
    {
        ll n;
        scanf("%lld", &n);
        for(ll i = 0;i < n; i++)
        {
            scanf("%lld", &a[i]);
            se.insert(a[i]);
        }
        ll num = se.size();
        ll tot = 0, tot1 = 0, sum = 0;
        ll ans = INF;
        for( ; ; )
        {
            while(tot1 < n && sum < num)
            {
                if(ma[a[tot1++]]++ == 0) sum++;
            }
            if(sum < num) break;
            ans = min(ans, tot1 - tot);
            if(--ma[a[tot++]] == 0) sum--;
        }
        printf("%lld
    ", ans);
        return 0;
    }
    
  • 相关阅读:
    静态链接与动态链接的区别(转载)
    VC++界面编程之--阴影窗口的实现详解
    win7 vmware 无法使用usb
    如何划分子网,确定子网和掩码的位数?
    华为三层交换机-路由-硬件防火墙的配置
    jquery json ajax -2
    jquery json ajax
    wes开发笔记
    伪类和伪元素
    优化sql语句
  • 原文地址:https://www.cnblogs.com/zyysyang/p/11066780.html
Copyright © 2020-2023  润新知