• 秀姿势【模拟】【哈希】


    题目大意:

    “蓝猫淘气三千问,看蓝猫,我有姿势我自豪!”话说能考上HYSBZ的孩纸们肯定都是很有姿势的孩纸们,但是大家普遍偏科,都只有一门科目考得好。已知HYSBZ的入学考试科目数量小于等于10^9,而有n个学生参加了入学考试。现在HYSBZ要刷人了,招生办每一次刷人会把一个科目考得好的人全部刷掉,但是最多不能刷超过K次。(刷就是不录取)而HYSBZ的校长看录取名单时,最喜欢看的就是连续都是同一个科目考得好的人。他定义完美学生序列为连续且考得好的科目都为同一门的学生序列。现在招生办主任想让你帮他设计一种录取方案,使得最长的完美学生连续子序列尽量长。


    思路:

    队列+哈希/map/快拍+二分

    用队列维护一个区间,使得这个区间的不同数字个数不超过k+1,统计出来的每个合法区间的众数的数量的最大值便为答案。


    代码:

    #include <cstdio>
    #include <iostream>
    #include <queue>
    #include <map>
    using namespace std;
    
    int n,k,x,s,a,ans;
    queue<int> q;
    map<int,int> num;  //每个数字的个数
    
    int main()
    {
        scanf("%d%d",&n,&k);
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            if (!num[x])  //队列里没有这个数字
            {
                s++;
                while (s>k+1)  //数字个数超过可k
                {
                    a=q.front();  
                    q.pop();
                    num[a]--;  //这个数字数量减一
                    if (!num[a]) s--;  //没有这个数字了
                }
            }
            num[x]++;  
            q.push(x);
            if (num[x]>ans) ans=num[x];  //求最大值
        }
        printf("%d\n",ans);
        return 0;
    }
  • 相关阅读:
    Exercise 3: Numbers And Math
    Exercise 1: A Good First Program
    Lambda表达式详解
    @CacheEvict中的allEntries与beforeInvocation
    swagger接口文档查看地址
    开发常用软件下载
    mybatis中的<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>说明
    Git初使用
    vue.js的引用地址
    Git push代码到远程仓库
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9336704.html
Copyright © 2020-2023  润新知