ZOJ 3790 Consecutive Blocks 模拟题「建议收藏」

ZOJ 3790 Consecutive Blocks 模拟题

大家好,又见面了,我是全栈君。

Consecutive Blocks

先离散一下,然后模拟,把一种颜色i所在的位置都放入G[i]中。然后枚举一下终点位置,滑动窗体使得起点和终点间花费不超过K,求中间过程的最大值就可以。

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define N 100005
set<int>myset;
map<int,int>mp;
set<int>::iterator p;
int n ,k;
int a[N];
vector<int>s[N];
int go(int cur){
	int now = k;
	int ans = 1, l = 0, siz = s[cur].size();
	int len = 1;
	for(int i = 1; i < siz; i++){
		if(s[cur][i-1] == s[cur][i]-1)
		{
			len++;
			ans = max(ans, len);
			continue;
		}
		now -= s[cur][i]-s[cur][i-1]-1;
		if(now>=0)
		{ len++; ans = max(ans, len);}
		else
		{
			while(now<0)
			{
				l++;
				now += s[cur][l]-s[cur][l-1]-1;
				len--;
			}
			len++;
		}
	}
	return ans;
}
int main()
{
	int T ,m,u,v,w, i ,j;
	while(~scanf("%d %d",&n,&k)){
		myset.clear();
		mp.clear();
		for(i=1;i<=n;i++)scanf("%d",&a[i]),myset.insert(a[i]);
		for(p=myset.begin(), i = 1; p!=myset.end(); p++, i++)
			mp.insert(pair<int,int>(*p,i)),s[i].clear();
		int top = i;
		for(i=1;i<=n;i++)
		{
			a[i] = mp.find(a[i])->second;
			s[a[i]].push_back(i);
		}
		int ans = 0;
		for(i=1;i<top;i++)
			ans = max(ans, go(i));
		printf("%d\n",ans);		
	}
	return 0;
}
/*
13 3 
1000000000 2 2 1 1 2 2 5 6 8 2 2 2


*/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116171.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何启用计算机的休眠,电脑休眠

    如何启用计算机的休眠,电脑休眠电脑休眠指的是将当前处于运行状态的数据保存在硬盘中,整机将完全停止供电。[1]在休眠时可以完全断开电脑的电源,自动关闭显示器和硬盘的时间设置为多长时间比较合适应看你需要了。中文名电脑休眠处于运行状态的数据保存在硬盘中存储在硬盘中进入休眠状态和唤醒的速度都相对较慢电脑休眠工作模式编辑语音为什么需要休眠尽管电脑硬件运行速度越来越快,但操作系统的体积也在不断膨胀,使得电脑开、关机…

  • android开发 不注意的异常

    android开发 不注意的异常

  • java权限拦截器

    java权限拦截器SecurityInterceptor.javapackagelight.mvc.framework.interceptors;importjava.util.List;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importlight.

  • 程序员基本法则_程序员知识

    程序员基本法则_程序员知识DRY(不要重复你自己) 可读性第一,性能第二 低耦合、高内聚 童子军军规(让营地比你来的时候更干净)

  • git clone指定分支

    git clone指定分支技术背景Git是代码版本最常用的管理工具,此前也写过一篇介绍Git的基本使用的博客,而本文介绍一个可能在特定场景下能够用到的功能–直接拉取指定分支的内容。GitClone首先看一下如果我们按照常规的操作去拉取一个Gitee的代码仓,是什么样的效果:$gitclonehttps://gitee.com/mindspore/mindscience.git正克隆到’mindsci…

  • 数据库的or语句_oracle数据库常用sql语句

    数据库的or语句_oracle数据库常用sql语句一、ORACLE的启动和关闭1、在单机环境下要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下su-oraclea、启动ORACLE系统oracle>svrmgrlSVRMGR>connectinternalSVRMGR>startupSVRMGR>quitb、关闭ORACLE系统oracle>svrmgrlSVRMGR&g…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号