吃月饼 尺取法(双指针)
月饼
描述
端午节都过了,中秋节还会远吗?中秋节吃月饼是我国的传统习俗。每年的中秋节,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);
吃月饼 尺取法(双指针)相关推荐
- P2564 [SCOI2009]生日礼物(尺取法/双指针)
LINK 不得不说 双指针用法nb 题目 输入输出样例 输入 6 3 1 5 2 1 7 3 1 3 8 输出 3 思路: 建议看尺取法 代码: #include<bits/stdc++.h&g ...
- 数据结构9-双指针(尺取法)(double pointer)
双指针有好几种,但是最常用的是尺取法,所以有的时候就说尺取法 双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描, ...
- ACM—各种模拟 总结(字符串,尺取法,数学问题)习题汇总
目录 一.字符串模拟 二. 高精度计算 1. 回文数(高精度,进制转换) 三.数学问题模拟 四.尺取法(双指针法) 1.都说小镇的切糕贵 (尺取法,字符串) umi和弓道 五.奇怪的模拟 x的位数=l ...
- 【常用技巧精选】尺取法
整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...
- 算法篇之-----滑动窗口(尺取法)
滑动窗口(尺取法 1. 介绍 2. 滑动窗口法的大体框架 4.最小覆盖子串 5.窗口数量 6.最小值 1. 介绍 滑动窗口法,也叫尺取法(可能也不一定相等,大概就是这样 =.=),可以用来解决一些查找 ...
- 解题报告 (十三) 尺取法
文章目录 尺取法 解题报告 PKU 2100 Graveyard Design PKU 3061 Subsequence PKU 2739 Sum of Consecutive Prime Numbe ...
- P1638 逛画展——尺取法的妙用
题目描述 博览馆正在展出由世上最佳的 mm 位画家所画的图画. 游客在购买门票时必须说明两个数字,aa 和 bb,代表他要看展览中的第 aa 幅至第 bb 幅画(包含 a,ba,b)之间的所有图画,而 ...
- HRBUST 2388 - 千方残光剑(尺取法 + 权值线段树)
Description 有n个怪物排成一排,他们的生命值各不相同,asuka有一个叫做"千方残光剑"的技能,可以先秒杀掉y个怪物,然后对任意个怪物造成总量小于等于x点的伤害,但是如 ...
- 尺取法 --算法竞赛专题解析(2)
本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 2019.8 网购:京东 当当 作者签名书 如有建议, ...
最新文章
- DISTINCT 去重---SQL
- python【力扣LeetCode算法题库】876- 链表的中间结点
- html或者jsp页面刷新问题
- ccd视觉定位教程_CCD视觉检测机有哪些作用?
- 信息学奥赛一本通 1163:阿克曼(Ackmann)函数
- python流程控制几种_python基础流程控制与数据类型
- FastDFS-单机版安装
- Linux学习笔记(PATH,cp,mv,文档查看cat/more/less/head/tail)
- storm 可靠性和非可靠性
- 第三章CDMA的原理与应用(2)
- A1 A2 B1 B2 英语分级单词 汇总
- 图像处理 灰度世界算法
- 绘制盐沼植被图的混合方法-文献阅读
- Struts 1与Struts 2区别
- 基于git(分布式版本控制系统)的各种服务器权限工具对比 Gitlab服务器搭建 以及邮箱、LDAP配置 实现公司多人协同开发
- VS 创建C# winfrom 语音播报(文字朗读),无需下载插件
- IEEE期刊LaTeX模板
- [前端基础] JavaScript 基础篇(下)
- Android开发——流量统计
- SkeyeVSS综合安防监控视频云服务Windows、Linux跨平台安装部署说明文档