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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python识别文字位置_如何利用Python识别图片中的文字

    python识别文字位置_如何利用Python识别图片中的文字一、前言不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制。或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存。但是当我们想用到里面的文字时,还是要一个字一个字打出来。那么我们能不能直接识别图片中的文字呢?答案是肯定的。二、Tesseract文字识别是ORC的一部分内容,ORC的意思是光学字符识别,通俗讲就是文字识别。Tesserac…

    2022年5月18日
    59
  • 行为识别综述

    行为识别综述定义背景难点最新论文最新算法数据集1定义行为识别:行为识别(ActionRecognition)任务是从视频剪辑(2D帧序列)中识别不同的动作,其中动作可以在视频的整个持续时间内执行或不执行。行为识别似乎是图像分类任务到多个帧的扩展,然后聚合来自每帧的预测。尽管图像分类取得了很大的成功,但是视频分类和表示学习依然进展缓慢。2背景2.1方法2.1.1传统方法提取视频区域的局部高维视觉特征,然后组合成固定大小的视频级描述,最后利用分类器(SVM,RF等)进行最终预测2.

    2022年6月21日
    28
  • JLINK的SWD接口调试器制作

    JLINK的SWD接口调试器制作                 SWD接口调试器制作  将1和2号脚连接在一起,连接到VCC上。其他引脚按照以上顺序排列即可。

    2022年5月22日
    33
  • java二维数组的创建,java二维数组创建方法

    java二维数组的创建,java二维数组创建方法java动态创建二维数组,从零学java笔录-第31篇图解二位数组在内存中存储,java二维数组动态赋值,java二维数组创建方法二维数组的定义typearrayName[][];type[][]arrayNameJava二维数组的声明、初始化和引用二维数组的声明、初始化和引用与一维数组相似,这里不再详……java定义二维数组的几种写法_计算机软件及应用_IT/计算…

    2022年6月10日
    45
  • CTFshow——SSTI

    CTFshow——SSTI首先一定要了解有关python类的知识:python__base__等内置方法pythoninspect模块解析#coding=utf-8__author__=”leaves”classBase(object):a=0def__init__(self):self._a=10passclassChild(Base):”测试测试”_b=10def__str__(

    2022年10月20日
    5
  • linux golang环境安装_python环境搭建

    linux golang环境安装_python环境搭建Golang环境搭建

    2022年8月31日
    4

发表回复

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

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