zoukankan      html  css  js  c++  java
  • 【尺取法】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;
    }
    
  • 相关阅读:
    Java 定时任务
    Swing中常用的方法
    瀑布流ajax分页
    权限管理
    图片自动加水印
    jsp自动生成静态页(提供思路)
    分页查询语句
    使用phpmailer发送邮件(以QQ邮箱为例)
    在浏览器的标签页显示网站标志图标(或指定图标)的方法
    随机生成验证码
  • 原文地址:https://www.cnblogs.com/zyysyang/p/11066780.html
Copyright © 2011-2022 走看看