D. Divide and Summarize(BFS+二分+预处理)

news2024/10/6 16:16:48

Problem - 1461D - Codeforces

迈克收到一个长度为n的数组作为生日礼物,决定测试一下它的漂亮程度。

如果有一种方法可以通过一定数量(可能是零)的切片操作得到一个元素总和为si的数组,那么这个数组将通过第i次漂亮度测试。


一个数组的切分操作是以如下方式进行的。

假设mid=⌊max(array)+min(array)2⌋,其中max和min-是寻找最大和最小数组元素的函数。换句话说,mid是数组的最大和最小元素之和除以2后四舍五入。
然后,数组被分割成左右两部分。左边的数组包含所有小于或等于mid的元素,右边的数组包含所有大于mid的元素。左边和右边的元素保持它们在数组中的相对顺序。
在第三步中,我们选择我们想保留的左和右数组中的哪一个。所选择的数组将取代当前的数组,而另一个数组则被永久地丢弃了。
你需要帮助Mike找出q prettiness测试的结果。

请注意,你测试的是数组a的漂亮程度,所以每次漂亮程度测试都是从原始(初始)数组a开始的,因此,第一个切片(如果需要)总是在数组a上进行。

输入
每个测试包含一个或多个测试案例。第一行包含测试用例的数量t(1≤t≤100)。

每个测试用例的第一行包含两个整数n和q(1≤n,q≤105)--数组a的长度和prettiness测试的总数量。

每个测试用例的第二行包含n个整数a1,a2,...,an(1≤ai≤106)--数组a的内容。

每个测试用例的下一个q行包含一个整数si(1≤si≤109)--迈克想在第i个测试中得到的元素之和。

保证n和q的总和不超过105(∑n,∑q≤105)。

输出
打印q行,每行都包含一个 "是",如果相应的漂亮度测试通过,则是 "否"。

例子
inputCopy
2
5 5
1 2 3 4 5
1
8
9
12
6
5 5
3 1 3 1 3
1
2
3
9
11
输出拷贝




是的

是的



注释
第一个测试案例的解释。

我们可以通过以下方式得到一个和为s1=1的数组。
1.1 a=[1,2,3,4,5], mid=1+52=3, left=[1,2,3], right=[4,5] 。我们选择保留左边的数组。

1.2 a=[1,2,3], mid=1+32=2, left=[1,2], right=[3]. 我们选择保留左边的数组。

1.3 a=[1,2], mid=1+22=1, left=[1], right=[2]. 我们选择保留左边的数组,其总和等于1。

可以证明,和为s2=8的数组是不可能产生的。
一个和为s3=9的数组可以通过以下方式生成。
3.1 a=[1,2,3,4,5], mid=1+52=3, left=[1,2,3], right=[4,5] 。我们选择保留右边的数组,其和等于9。

可以证明,和为s4=12的数组是不可能产生的。
我们可以通过以下方式得到一个总和为s5=6的数组。
5.1 a=[1,2,3,4,5], mid=1+52=3, left=[1,2,3], right=[4,5] 。我们选择保留左边的,其总和等于6。

对第二个测试案例的解释。

可以证明一个和为s1=1的数组是不可能产生的。
我们可以通过以下方式得到一个和为s2=2的数组。
2.1 a=[3,1,3,1,3], mid=1+32=2, left=[1,1], right=[3,3,3] 。我们选择保留左边的数组,其和等于2。

可以证明,一个总和为s3=3的数组是不可能产生的。
我们可以通过以下方式得到一个总和为s4=9的数组。
4.1 a=[3,1,3,1,3], mid=1+32=2, left=[1,1], right=[3,3,3] 。我们选择保留右边的数组,其和等于9。

我们可以通过零切分操作得到一个总和为s5=11的数组,因为数组总和等于11。

题解:

我们可以发现每次都是根据数组区间最大值+最小值/2,进行分割,与顺序无关,那我们先排序,求一下前缀和以便,求出某段区间的值,

我们发现通过上述分割操作,找到的值是一定的,并且也不多,

利用BFS遍历所有区间,每次二分得到比mid大的下标,根据前缀和来得到所求区间的值

我们可以提前预处理出来所有的值,然后看询问的值是否出现过

注意我们是可以不切片的,所以所有值相加的值也要存起来

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define int long long
int n,q,f;
int a[200505];
int b[200050];
map<int,int> vis;
void bfs()
{
	queue<pair<int,int>> q;
	q.push({1,n});
	while(q.size())
	{
		auto t = q.front();
		q.pop();
		int l = t.first,r = t.second;
		int mid = (a[l] + a[r])/2;
		int k = upper_bound(a+1,a+1+n,mid) - a;
		int ans ;
		if(r >= k)
		{
			ans = b[r] - b[k-1];
			vis[ans] = 1;
			q.push({k,r});

		}
		if(k<=r&&k-1>=l)
		{
			ans = b[k-1] - b[l-1];
			vis[ans] = 1;
			q.push({l,k-1});
    	}
		
	}
}
//1 1 3 3 3
void solve()
{
	
	cin >> n >> q;
	for(int i = 1;i <= n;i++)
	cin >> a[i];
	vis.clear();
	sort(a+1,a+1+n);
	for(int i = 1;i <= n;i++)
	{
		b [i] = b[i-1] + a[i];
	}
	bfs();
	vis[b[n]] = 1;
	while(q--)
	{
		int s;
		cin >> s;
		if(vis[s])
		{
			cout<<"YES\n";
		}
		else
		{
			cout<<"NO\n";
		}
	}

}
signed main()
{
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve();
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红红火火的VB,悄然离去,新型中文编程,如日中天

“悲哀&#xff01;现在用VB连1200都赚不到。”一位VB程序员有感而发。曾经红红火火的VB编程语言&#xff0c;如今却徘徊在被淘汰边缘&#xff0c;让人惋惜。 依稀记得&#xff0c;读大学时候&#xff0c;有一位财务专业同学&#xff0c;特别喜欢计算机&#xff0c;有空就自学V…

密码学引论 | DES

文章目录DES算法1 算法流程2 算法细节&#xff08;1&#xff09;子密钥的产生&#xff08;2&#xff09;初始置换IPIPIP&#xff08;3&#xff09;加密函数&#xff08;4&#xff09;逆初始置换IP−1IP^{-1}IP−1例题DES算法 1 算法流程 64位密钥经子密钥产生算法产生出16个子…

用 TypeScript 类型运算实现一个五子棋游戏

之前有看到有大佬用类型运算实现了中国象棋程序 和 Lisp 解释器 甚是震惊&#xff0c;之前不太会看不懂。 最近也学了点类型体操的内容想着自己也玩一下。选择五子棋的原因是相对来说规则是更简单一些的也比较好实现。此实现没有考虑性能上优化和最佳实现方式只关注功能的实现…

详细步骤讲解matlab代码通过Coder编译为c++并用vs2019调用

项目上需要C&#xff0c;奈何本人不会&#xff0c;所以就用matlab写好测试后&#xff0c;用matlab Coder编译为c并用vs2019调用 一个简单的例子&#xff0c;求取两个4*4矩阵相加后&#xff0c;在求取最大值与最小值。matlab代码如下 function [a,b] min_max(m,n)temp mn;a m…

STM32F407 电机编码器测量

文章目录一、STM32F407 定时器编码器功能1.1 STM32定时器简介1.2 STM32定时器编码器功能二、带编码器的直流电机三、代码与验证3.1 初始化代码3.2 验证一、STM32F407 定时器编码器功能 1.1 STM32定时器简介 STM32的定时器功能非常强大&#xff0c;根据官方手册&#xff0c;定…

旅游网页设计 web前端大作业 全球旅游私人订制 旅游公司网站模板(HTML+CSS+JavaScript)

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

OctaneRender界面布局自定义界面教程丨使用教程

您可以通过单击并拖动每个窗格左上角的方块&#xff08;图 1&#xff09;来重新排列 OctaneRender 界面&#xff08;图形编辑器、渲染视口、节点检查器和大纲视图&#xff09;中每个窗格的窗口。 图 1&#xff1a;窗格排列图标 用任何鼠标按钮单击同一个方块会显示更多用于…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.20 ActiveMQ 安装

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.20 ActiveMQ 安装5.20.1 下载5.20.2 安装5.20.3 使…

[附源码]SSM计算机毕业设计基于的城镇住房公积金管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Unity Hair 毛发系统 初体验

文章目录&#x1f388; 简介&#x1f388; 所需环境&#x1f388; 下载安装&#x1f388; 使用初体验&#x1f36d; 创建一个Hair示例&#x1f36d; Hair Asset&#x1f36d; 尝试给Avatar创建头发&#x1f36d; 如何更改材质&#x1f388; 简介 8月份的时候Unity官方发布了Ha…

第7章 Elasticsearch面试题

7 . 1 为什么要使用Elasticsearch? 系统中的数据&#xff0c;随着业务的发展&#xff0c;时间的推移&#xff0c;将会非常多&#xff0c;而业务中往往采用模糊查询进行数据的搜索&#xff0c;而模糊查询会导致查询引擎放弃索引&#xff0c;导致系统查询数据时都是全表扫描&am…

即将见面:SpreadJS V16:重大改进

内容摘自互联网&#xff1a;&#xff1a;&#xff1a;&#xff1a;&#xff1a;&#xff1a;&#xff1a; 新功能背景&#xff1a;在SpreadJS V16之前&#xff0c;关于文件toJSON()之后&#xff0c;生成的json文件太大&#xff0c;一直被很多客户诟病。例如&#xff0c;同样一…

PySide创建界面关联项目(五) 百篇文章学PyQT

本文章是百篇文章学PyQT的第五篇&#xff0c;本文讲述如何使用PySide创建UI界面&#xff0c;并且关联入PyCharm 新建的项目中成功运行第一个PyQT程序&#xff0c;博主在本篇文章中将遇到和踩过的坑总结出来&#xff0c;可以供大家参考&#xff0c;希望大家安装顺利。包括 安装、…

我的Vue组件化开发首个项目todolist

TodoList 学习笔记&#xff1a; 总结TodoList案例 1.组件化编码流程: (1).拆分静态组件:组件要按照功能点拆分&#xff0c;命名不要与htm|元素冲突。 (2).实现动态组件:考虑好数据的存放位置&#xff0c;数据是一个组件在用&#xff0c; 还是一些组件在用: . 1).-个组件在…

Vue简单实例——从webpack到vue,再到weex

这一章节&#xff0c;我们主要针对从webpack&#xff0c;vue&#xff0c;weex的框架结构上来说明对比这三个框架的区别 主要功能&#xff1a; webpack&#xff1a; webpack是前端项目工程化的具体解决方案。 它提供了友好的前端模块化开发支持&#xff0c;以及代码压缩混淆&…

基于身份的分段:三种技术路线解析与建议

SmartX 趋势分享 SmartX 趋势分享由 SmartX 团队内部分享的权威机构市场报告、全球重要媒体文章精选整理而成。内容涉及现代数据中心相关产业趋势以及金融、医疗、制造等行业全球用户需求与实践前沿洞察。在“零信任实践”系列的第一篇文章中&#xff0c;我们介绍了两种实现零信…

基于springboot“漫画之家”系统设计与实现-计算机毕业设计源码+LW文档

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

vue3+ts部分场景示例

模板语法 插值变量 div{{插值}}div const message: number 84; 指定变量为数字类型 const message: string小明 ; 指定字符串类型 const message: booleanfalse ; 指定布尔值类型 const message: any小明 ; any指定任意类型 const message: object{} ; 指定对象…

代码随想录算法训练营第七天|二叉树(截止到层序遍历)

二叉树的递归遍历 递归遍历是最简单的 // 前序 class Solution { public:void traversal(TreeNode* cur, vector<int>& vec) {if (cur NULL) return;vec.push_back(cur->val); // 中traversal(cur->left, vec); // 左traversal(cur->right, vec); //…

【高级篇】线程与线程池

一、线程回顾 1、初始化线程的 4 种方式 1&#xff09;、继承 Thread public static class Thread01 extends Thread{Overridepublic void run() {System.out.println("当前线程&#xff1a;"Thread.currentThread().getId());int i 10 / 2;System.out.println(&qu…