月饼

描述

端午节都过了,中秋节还会远吗?中秋节吃月饼是我国的传统习俗。每年的中秋节,yoyo都会吃很多很多个月饼。比如蛋黄莲蓉,豆沙等等。现在,他得到了n个月饼,月饼被排成一个固定的一列。但是这个他有一个习惯,他需要在这些月饼中选择两段连续的月饼,而且对于每段连续的月饼,他不喜欢吃到相同种类的月饼的个数超过m个。所以他想知道在他的习惯下他最多能吃多少个月饼。注意一个月饼只能被吃一次。

输入

首先输入数字n和m,表示月饼的个数和他不喜欢吃到相同种类的月饼的个数。(0<=n<=1e6,0<=m<=1e6)

接下来输入n个数字,表示月饼的种类,不同的数字代表不同的月饼(0<=ai​<=1000)

输出

输出yoyo最多可以吃到多少个月饼。

输入样例 1

5 1

1 1 2 3 3

输出样例 1

4

提示

样例解释:一共n个月饼,我们要选择两个连续的不相交的子序列。显然可以选择[1,1],[2,4]这两个区间,或者是[2,4]和[5,5]这两个区间。所以答案就是4个

首先,我们发现题目是要我们找出两个连续的子序列,每个子序列中相同的数字不能超过m个,我

们发现,对于一个子序列,假如[l,r]是不满足题目的要求,那么[x,r](x<=l)或者[l,y](y>=r)也是不

满足题目要求的。所以我们可以使用尺取法先从左边往右边扫求出在第i个位置前面的满足题目条件

的子序列的最长的长度,然后从右边往左边扫求出第i个位置的后面满足题目条件的子序列的最长的

长度。最后再扫一遍维护最大的值就行了。

#include<iostream>

#include<fstream>

#include<algorithm>

#include<cstring>

using namespace std;

int a[1000010]; //代表每种月饼的种类

int num[1010]; //用来记录每个数字出现的次数

int pre[1000010],suf[1000010];

int main(){

//freopen("1.in","r",stdin);

//freopen("1.out","w",stdout);

int n,m;

cin>>n>>m;

for(int i=1;i<=n;i++){

cin>>a[i];

}

for(int l=1,r=1;l<=n;l++){

while(l<=r&&num[a[r]]<m&&r<=n){

num[a[r]]++;

pre[r]=max(pre[r-1],r-l+1);

r++;

}

num[a[l]]--;

}

memset(num,0,sizeof(num));

for(int l=n,r=n;r>=1;r--){

while(l<=r&&num[a[l]]<m&&l>=1){

num[a[l]]++;

suf[l]=max(suf[l+1],r-l+1);

吃月饼 尺取法(双指针)相关推荐

  1. P2564 [SCOI2009]生日礼物(尺取法/双指针)

    LINK 不得不说 双指针用法nb 题目 输入输出样例 输入 6 3 1 5 2 1 7 3 1 3 8 输出 3 思路: 建议看尺取法 代码: #include<bits/stdc++.h&g ...

  2. 数据结构9-双指针(尺取法)(double pointer)

    双指针有好几种,但是最常用的是尺取法,所以有的时候就说尺取法 双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描, ...

  3. ACM—各种模拟 总结(字符串,尺取法,数学问题)习题汇总

    目录 一.字符串模拟 二. 高精度计算 1. 回文数(高精度,进制转换) 三.数学问题模拟 四.尺取法(双指针法) 1.都说小镇的切糕贵 (尺取法,字符串) umi和弓道 五.奇怪的模拟 x的位数=l ...

  4. 【常用技巧精选】尺取法

    整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...

  5. 算法篇之-----滑动窗口(尺取法)

    滑动窗口(尺取法 1. 介绍 2. 滑动窗口法的大体框架 4.最小覆盖子串 5.窗口数量 6.最小值 1. 介绍 滑动窗口法,也叫尺取法(可能也不一定相等,大概就是这样 =.=),可以用来解决一些查找 ...

  6. 解题报告 (十三) 尺取法

    文章目录 尺取法 解题报告 PKU 2100 Graveyard Design PKU 3061 Subsequence PKU 2739 Sum of Consecutive Prime Numbe ...

  7. P1638 逛画展——尺取法的妙用

    题目描述 博览馆正在展出由世上最佳的 mm 位画家所画的图画. 游客在购买门票时必须说明两个数字,aa 和 bb,代表他要看展览中的第 aa 幅至第 bb 幅画(包含 a,ba,b)之间的所有图画,而 ...

  8. HRBUST 2388 - 千方残光剑(尺取法 + 权值线段树)

    Description 有n个怪物排成一排,他们的生命值各不相同,asuka有一个叫做"千方残光剑"的技能,可以先秒杀掉y个怪物,然后对任意个怪物造成总量小于等于x点的伤害,但是如 ...

  9. 尺取法 --算法竞赛专题解析(2)

    本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 2019.8 网购:京东 当当      作者签名书 如有建议, ...

最新文章

  1. DISTINCT 去重---SQL
  2. python【力扣LeetCode算法题库】876- 链表的中间结点
  3. html或者jsp页面刷新问题
  4. ccd视觉定位教程_CCD视觉检测机有哪些作用?
  5. 信息学奥赛一本通 1163:阿克曼(Ackmann)函数
  6. python流程控制几种_python基础流程控制与数据类型
  7. FastDFS-单机版安装
  8. Linux学习笔记(PATH,cp,mv,文档查看cat/more/less/head/tail)
  9. storm 可靠性和非可靠性
  10. 第三章CDMA的原理与应用(2)
  11. A1 A2 B1 B2 英语分级单词 汇总
  12. 图像处理 灰度世界算法
  13. 绘制盐沼植被图的混合方法-文献阅读
  14. Struts 1与Struts 2区别
  15. 基于git(分布式版本控制系统)的各种服务器权限工具对比 Gitlab服务器搭建 以及邮箱、LDAP配置 实现公司多人协同开发
  16. VS 创建C# winfrom 语音播报(文字朗读),无需下载插件
  17. IEEE期刊LaTeX模板
  18. [前端基础] JavaScript 基础篇(下)
  19. Android开发——流量统计
  20. SkeyeVSS综合安防监控视频云服务Windows、Linux跨平台安装部署说明文档

热门文章

  1. Java编程完成商城库存清单程序设计
  2. java关于如何制作商城库存清单程序设计案例的个人笔记
  3. 学习Autodock分子对接
  4. (附源码)小程序智能养老系统平台 毕业设计170900
  5. 2021年资料员-通用基础(资料员)报名考试及资料员-通用基础(资料员)新版试题
  6. LINQ学习之旅——最后一站LTX之基础和编程接口所包含类的简介
  7. 【Lesson 11】中古调式、古代名族音乐、小调调式 三者关系梳理
  8. PHP 编写留言板
  9. Python——cv2图片识别
  10. Cisco用命令行配置1841路由器