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


*/

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 1602 c语言驱动程序,51单片机驱动LCD1602程序设计(C语言)很详细的教程

    1602 c语言驱动程序,51单片机驱动LCD1602程序设计(C语言)很详细的教程//********写指令函数************voidLCD_write_command(uchardat){LCD_DB=dat;LCD_RS=0;//指令LCD_RW=0;//写入LCD_E=1;//允许LCD_E=0;delay_n40us(1);//实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。}//****************************…

    2022年7月16日
    14
  • ObjectInputStream&ObjectOutputStream

    ObjectInputStream&ObjectOutputStream

    2021年8月31日
    58
  • .net 4.0 ValidateRequest=”false” 无效「建议收藏」

    .net 4.0 ValidateRequest=”false” 无效「建议收藏」
    当你在安装了.NETFramework4.0以上版本后,当你的应用程序以.NETFramework4.0为框架版本,你的任意服务器请求,都将被进行服务器请求验证(ValidationRequest),这不仅包括ASP.NET,同时也包括WebServices等各种HTTP请求,不仅仅针对aspx页面,也针对HTTPHandler,HTTPModule等,因为这个验证(Valify)的过程,将会发生在BeginRequest事件之前。
       问题的解决方案就是在全局级别(

    2022年6月6日
    40
  • python 删除文件、清空目录的方法总结

    python 删除文件、清空目录的方法总结Pythonos.remove()方法os.remove()方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。在Unix,Windows中有效以下实例演示了remove()方法的使用:#!/usr/bin/python#-*-coding:UTF-8-*-importos,sys#列出目录print”目录为:%s”%os…

    2022年5月30日
    247
  • JS中Class类的详解

    JS中Class类的详解概述    在ES6中,class(类)作为对象的模板被引入,可以通过class关键字定义类。它可以被看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。    类实际上是个“特殊的函数”,就像你能够定义的函数表达式和函数声明一样,类语法有两个组成部分:类表达式和类声明。严格模式    类和模块的内部,默认就是严格模式,所以不需要使用usestrict指定运行模式…

    2022年6月2日
    52
  • iPhone使用教程_iphone基础使用

    iPhone使用教程_iphone基础使用iPhone史上最全的使用教程iPhone的解锁、越狱、激活、固件等等是什么意思,有什么分别这几天看见好多新人问这几个词的含义及区别。我在这儿说说我的看法,不是官方解释,不懂的学习一下,懂的绕道,如有错误,敬请指正!第一次买来时或恢复官方固件后,iPhone会处于那种只能拨打紧急电话状态,不能使用其它功能,如果要使用其它功能,就必须进行一项操作,那就是“激活”。一般有锁版的只有使…

    2022年9月15日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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