首页 > 其他分享 >「ULSG-1」数字生命 题解

「ULSG-1」数字生命 题解

时间:2023-06-16 21:13:15浏览次数:45  
标签:数字 int 题解 次数 算法 长度 ULSG

题目传送门

题目描述

给定一段长度为 \(n\) 的序列,找出其中长度为 \(m\) 的一段子序列,且其中各数字出现次数与给定模板中相对应的次数不相同的数字等于 \(k\)。

题目解法

容易联想到一个用于求固定长度区间最大值的 \(O(n)\) 算法——「滑动窗口」,此题可借鉴此算法。

我们以此题的样例#2进行说明

10 4 2
4 1 4 1 4 4 1 2 2 3
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0

首先创建一个长度为 \(m\) ,包含了序列上 \([1,m]\) 的窗口,易得其各数字出现次数,

[4 1 4 1] 4 4 1 2 2 3
2 0 0 2 0 0 ......

接着定义两个指针 \(l=1,r=m\),在判断条件为 \(r<=n\) 的循环中每次右移指针 \(l,r\),同时将移除的数字对应次数 - 1,新增的数字对应次数 + 1,例当 \(l=3\) 时,

4 1 [4 1 4 4] 1 2 2 3
1 0 0 3 0 0 ......

同时每次将该区间各数字出现次数与模板比较,若不同处数量等于 \(k\),则判定此区间合法,答案 + 1。

综上,一个复杂度为 \(O(n)\) 的算法完成,同时,因为我们从1开始扫描,因此也满足按 \(l\) 从小到大输出答案的要求。

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N=6e6+2;

int n,m,k;
int a[N];
int b[17];
int cnt[17];

vector < pair<int,int> > ans;

int main()
{
	scanf("%d %d %d",&n,&m,&k);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=16;i++)
	{
		scanf("%d",&b[i]);
	}
	int l=1,r=m;
	for(int i=l;i<=r;i++) 
	{
		cnt[a[i]]++;
	}
	while(r<=n)
	{
		int insame=0;
		for(int j=1;j<=16;j++)
		{
			if(cnt[j]!=b[j]) insame++;
		}
		if(insame==k) ans.push_back({l,r});
		
		l++,r++;
		cnt[a[l-1]]--;
		cnt[a[r]]++;
	}
	printf("%d\n",ans.size());
	for(int i=0;i<ans.size();i++)
	{
		printf("%d %d\n",ans[i].first,ans[i].second);
	}
	return 0;
}

标签:数字,int,题解,次数,算法,长度,ULSG
From: https://www.cnblogs.com/AnEasySong/p/ulsg-1-shuo-zi-sheng-ming-ti-xie.html

相关文章

  • 「SiR-1」Checkmate 题解
    题外话:本体题目出自番剧《NOGAMENOLIFE》且题目背景中来吧,游戏开始了。是第一季中男主“空”的口头禅。(强烈推荐观看《NOGAMENOLIFEZERO》)回归正题awaP9355「SiR-1」Checkmate题解题目传送门博客宣传题目解读:在\(n\)行\(m\)列的棋盘中放置多枚棋子,求出其上......
  • 【BZOJ 3156】防御准备 题解
    原题令\(S_{i}=\sum_{j=1}^{i}j\),\(f_{i}\)为处理到第\(i\)个位置放置守卫塔的最小花费。观察题意,容易得到在\((1<=j<=i-1)\)时,有\(f_{i}=min\left\{f_{j}+\sum_{k=j+1}^{i-1}(i-k)+a_{i}\right\}\)①\(f_{i}=min\left\{f_{j}+\sum_{k=j+1}^{i-1}(i-k)\ri......
  • 101 显示数组中的大写字母 小写字母 数字
    packagecom.fqs.demo001;importjava.util.Scanner;publicclassCompare{publicstaticvoidmain(String[]args){//键盘录入一个字符串,统计该字符串大写字母字符,小写字母字符,数字字符出现的次数//比如ABCabc123Scannersc=newScanner(......
  • 【活动访谈】发力数字基座 推动物联创新—航天科技控股集团AIRIOT4.0平台发布会活动专
     近日,由航天科技控股集团股份有限公司主办的“数字基座智慧物联—AIRIOT4.0平台发布会”在北京圆满落幕。航天三院科技委总工程师王连宝应邀出席本次会议并接受媒体采访,共同参与访谈的还有AIRIOT产品研发创始人、航天科技控股集团股份有限公司智慧物联事业部总经理田淼,两位就......
  • 元数据在数字化时代中的应用与发展
    一、元数据的定义及分类元数据是指描述数据的数据,包括数据的属性、格式、结构、关系、来源、历史等信息。元数据通常被分为三类:技术元数据、业务元数据和操作元数据。1.技术元数据:主要描述数据的物理结构、属性以及存储方式等信息。例如,数据库中技术元数据包括表格、字段、数据......
  • Linux中-bash: /dev/null: Permission denied问题解决
    云上架构2021年08月06日09:19 ·  阅读682​今天在Centos7上运行如下命令 shell复制代码######添加hdfs用户#####useraddhdfs######切换至hdfs用户#####su-hdfs报如下错误 javascript复制代码-bash:/dev/null:Permissiondenied-bash......
  • 计讯物联小型水库水雨情和大坝安全监测解决方案:以数字之力,促水利建设智慧化
    政策背景根据《“十四五”水库除险加固实施方案》要求,到“十四五”末,全部完成现有及新增的约1.94万座病险水库除险加固;实施55370座小型水库雨水情测报设施和47284座小型水库大坝安全监测设施建设;对分散管理的48226座小型水库全面实行专业化管护模式。今年,水利部将会同财政部,继续......
  • 华为云苏光牛:坚持产品能力的升级,做金融数字化的坚实数据底座
    摘要:华为全球智慧金融峰会2023上,华为云数据库服务产品部总经理苏光牛带来了《华为云分布式数据库GaussDB,做金融数字化的坚实数据底座》的主题分享。6月7日,华为全球智慧金融峰会2023在上海顺利举行,华为云数据库服务产品部总经理苏光牛带来了《华为云分布式数据库GaussDB,做金融数字化......
  • 顺通数字化食堂报餐管理系统
    更加安全、更加轻量、体验更好,面向所有先报餐后吃饭的智慧饭堂报餐应用场景。报餐管理系统功能:我要报餐:用户可以在手机上进行报餐操作报餐明细:可查看所有的报餐记录,包括待用餐、已用餐、已过期的情况财务中心:用户可在小程序上进行财务操作报餐日历:展示报餐日历,一眼看到可以可报餐的......
  • PPT| 数字化工厂PLM-ERP-CAPP-MES-SCADA-LES介绍(可下载)
    PPT总共有24页,有需要PPT的同学可以关注:智能制造数字化咨询PPT总共有24页,有需要PPT的同学可以关注:智能制造数字化咨询......