【每日一题】—— B. Deja Vu(Codeforces Round 907 (Div. 2))(暴力枚举、队列)

🌏博客主页:PH_modest的博客主页
🚩当前专栏:每日一题
💌其他专栏:
🔴 每日反刍
🟡 C++跬步积累
🟢 C语言跬步积累
🌈座右铭:广积粮,缓称王!

一.题目描述

在这里插入图片描述

题目大意:

给你一个长度为 n n n 的数组 a a a ,由正整数组成,和一个长度为 q q q 的数组 x x x ,也由正整数组成。
一共有 q q q 个修改。关于 i i i 1 ≤ i ≤ q 1 \leq i \leq q 1iq )的修改,对于每个 j j j ( 1 ≤ j ≤ n 1 \leq j \leq n 1jn ),使得 a j a_j aj 可以被 2 x i 2^{x_i} 2xi 整除,那么就把 2 x i − 1 2^{x_i-1} 2xi1 加到 a j a_j aj注意 x i x_i xi ( 1 ≤ x i ≤ 30 1 \leq x_i \leq 30 1xi30 ) 是个不超过 30 的正整数。
完成所有修改查询后,需要输出最终数组。

题目链接:

B. Deja Vu(Codeforces Round 907 (Div. 2))

二.思路分析

主要讲解代码一的思想,代码二就当做一种技巧吧,知道就好,不详细解释了。

  1. 首先需要根据题目推出背后的性质:如果一个数是 2 x 2^{x} 2x的倍数,那么它就可以写成k* 2 x − 1 2^{x-1} 2x1,然后转换成2k* 2 x − 1 2^{x-1} 2x1,加上 2 x − 1 2^{x-1} 2x1,就变成了(2k+1) 2 x − 1 2^{x-1} 2x1,那么肯定不能整除 2 x 2^{x} 2x,而变成了 2 x − 1 2^{x-1} 2x1的倍数,所以数据经过操作之后会降级:从原来整除 2 x 2^{x} 2x变成整除 2 x − 1 2^{x-1} 2x1
  2. 首先需要先将数组a里的元素预处理,将其分类,分到对应能整除的次方下,用队列存储下标,存储下标的好处就是,我们可以通过下标直接修改元素值;
  3. 然后枚举数组x,这边有一个重要的点, 2 x 2^{x} 2x能够整除 2 x 2^{x} 2x 2 x + 1 2^{x+1} 2x+1也能整除 2 x 2^{x} 2x,所以能整除大于 2 x 2^{x} 2x的数也需要+ 2 x − 1 2^{x-1} 2x1,操作完之后将其从原来的队列里出列,进行降级处理,放入 2 x − 1 2^{x-1} 2x1对应的队列里
    在这里插入图片描述
  4. 最后就是对数据进行一些简单的处理,详细内容见代码一。

三.代码展示

代码一(队列+预处理思想)

#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<vector>
#include<cstring>
#define int long long
using namespace std;

int a[200020];
int x[200020];
deque<int>heap[31];//表示2的0次方到30次方

void solve()
{
	int n,q;
	cin>>n>>q;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i=0;i<q;i++)
	{
		cin>>x[i];
	}
	for(int i=0;i<n;i++)//预处理数组a,将其放入对应的次方
	{
		for(int j=1;j<=30;j++)
		{
			if(a[i]%(1<<j)!=0)
			{
				heap[j-1].push_back(i);//队列一般都是存下标,通过下标直接修改原数组的值
				break;
			}
		}
	}
	for(int i=0;i<q;i++)
	{
		for(int j=30;j>=x[i];j--)//一个数可能能除以比它大的次方,操作完之后会降级
		{
			while(heap[j].size())
			{
				int tmp=heap[j].front();//保存下标
				heap[j].pop_front();
				//修改数组中的值
				a[tmp]+=(1<<(x[i]-1));
				heap[x[i]-1].push_back(tmp);
			}
		}
	}
	for(int i=0;i<n;i++)
	{
		cout<<a[i]<<" ";
	}
	for(int i=0;i<=30;i++)
	{
		heap[i].clear();
	}
	cout<<"\n";
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

代码二(暴力模拟)

#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<vector>
#include<cstring>
#define int long long
using namespace std;

int mp[31]={1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824};
int flag[31]={0};
int s[200020];

void solve()
{
	memset(flag,0,sizeof(flag));
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
    	cin>>s[i];
	}
	for(int i=0;i<q;i++)
	{
		int x;
		cin>>x;
		if(flag[x]==1)
		{
			continue;
		}
		flag[x]=1;
		for(int i=1;i<=n;i++)
		{
			if(s[i]%mp[x]==0)
			{
				s[i]+=mp[x-1];
			}
		}
		
	}
	for(int i=1;i<=n;i++)
	{
		cout<<s[i]<<" ";
	}
	cout<<"\n";
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

最后:

每日一题系列旨在养成刷题的习惯,所以对代码的解释并不会特别详细,但足够引导大家写出来,选的题目都不会特别难,但也不是特别简单,比较考验大家的基础和应用能力,我希望能够将这个系列一直写下去,也希望大家能够和我一起坚持每天写代码。

之后每个星期都会不定期更新codeforces和atcoder上的题目,想要学习算法的友友们千万别错过了,有什么疑问欢迎大家在评论区留言或者私信博主!

在这里送大家一句话:广积粮,缓称王!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“苹果定律”失效,2023是VR的劫点还是拐点?

因为Pico裁员的事情&#xff0c;VR行业又被讨论了。 Pico于2021年9月被字节跳动收购&#xff0c;当时是出货量排名全球第三的VR 头显生产商。 此前曾有国际机构预测&#xff0c;2023年随着Meta和Pico的硬件更新&#xff0c;苹果Vision Pro的推出&#xff0c;三星电子重新回归VR…

黑马程序员微服务Docker实用篇

Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…

初探地理编码(2023.11.12)

地理编码相识 2023.11.12 引言1、地理编码简介2、地理编码API和服务&#xff08;解决方案供应商 / 厂商&#xff09;2.1 高德2.2 百度2.3 超图2.4 天地图2.5 ArcGIS2.6 MapBox2.7 Cesium2.8 MapLocation 3、python实例3.1 pip安装依赖库&#xff08;python 3.6&#xff09;3.2 …

git分支与tag标签的介绍与使用)

git分支与tag标签的介绍与使用 一.什么是分支与标签1.2.开发环境分层 二git分支介绍2.1分支操作2.2.IDEA中操作分支 三、Git标签的讲解3.1.GitBashHere操作标签3.2. IDEA中操作标签 一.什么是分支与标签 分支&#xff08;Branches&#xff09;&#xff1a; 功能开发&#xff…

Jenkins简介及Docker Compose部署

Jenkins是一个开源的自动化服务器&#xff0c;用于自动化构建、测试和部署软件项目。它提供了丰富的插件生态系统&#xff0c;支持各种编程语言和工具&#xff0c;使得软件开发流程更加高效和可靠。在本文中&#xff0c;我们将介绍Jenkins的基本概念&#xff0c;并展示如何使用…

PyCharm 安装库时显示连接超时

在setting->python Interpreter 中用“” 安装库时&#xff0c;出现一个弹窗&#xff0c;提示信息如下&#xff1a; Error updating package list: Connect timed out 通过查阅资料&#xff0c;发现是镜像源的问题&#xff0c;具体的解决方案如下&#xff1a; 1. 更新一下…

初始MySQL(四)(查询加强练习,多表查询(未完))

目录 查询加强 where加强 order by加强 group by 分页查询 总结 多表查询(重点) 笛卡尔集及其过滤 自连接 子查询 #先创建三张表 #第一张表 CREATE TABLE dept(deptno MEDIUMINT NOT NULL DEFAULT 0,dname VARCHAR(20) NOT NULL DEFAULT ,loc VARCHAR(13) NOT NULL D…

v-bind和v-model

目录 前言 v-bind 作用 语法格式 编译原理 简写 v-model 作用 使用方法 v-bind和v-model的区别和联系 前言 本文我们来了解一下模板语法之指令语法中的v-bind和v-model v-bind 作用 v-bind可以让html标签的某个属性的值产生动态的效果 语法格式 <html标签 v-bin…

菜单栏管理软件 Bartender 3 mac中文版功能介绍

​Bartender 3 mac是一款菜单栏管理软件&#xff0c;该软件可以将指定的程序图标隐藏起来&#xff0c;需要时呼出即可。 Bartender 3 mac功能介绍 Bartender 3完全支持macOS Sierra和High Sierra。 更新了macOS High Sierra的用户界面 酒吧现在显示在菜单栏中&#xff0c;使其…

Anolis 8.6 安装 Drawio

Anolis 8.6 安装 Drawio 22.1.0 一.RPM版&#xff08;不建议&#xff09;二.WAR 包部署 一.RPM版&#xff08;不建议&#xff09; Draw RPM 包下载链接 RPM 包直接基于Linux图形化能力部署&#xff0c;服务器类型的Linux系统启动RPM包安装的Draw可能比较复杂 系统版本 ## 1.…

如何配置Apple推送证书 push证书

转载&#xff1a;如何配置Apple推送证书 push证书 想要制作push证书&#xff0c;就需要使用快捷工具appuploader工具制 作证书&#xff0c;然后使用Apple的推送功能配置push证书&#xff0c;就可以得到了。PS&#xff1a;push没有描述文件&#xff0c;所以不 要问推送选择哪…

springboot苍穹外卖实战:十、缓存菜品(手动用redisTemplate实现缓存逻辑)+缓存套餐(Spring cache实现)

缓存菜品 缺点 缓存和数据库的数据一致性通常解决方案&#xff1a;延时双删、异步更新缓存、分布式锁。 该项目对于缓存菜品的处理较为简单&#xff0c;实际可以用管道技术提高redis的操作效率、同时cache自身有注解提供使用。 功能设计与缓存设计 建议这部分去看下原视频&…

登顶request模块

华子目录 Requests介绍安装requests模块常用方法常用属性实例引入各种请求方式基于get请求带参数的get请求推荐写法 基于post请求添加headers信息content获取二进制数据bytes类型获取json数据第一种方式第二种方式 response响应状态码判断 高级操作会话维持通过cookie维持会话通…

继承

文章目录 引出继承继承的概念继承的限制一个子类只能够继承一个父类&#xff0c;存在单继承局限。无法直接继承私有属性继承关系中&#xff0c;先构造父类&#xff0c;再构造子类 引出继承 Animal类 class Animal {private String name;private int age;public String getNam…

ChatGPT 4 分析天猫双十一历年成交额趋势情况

收集历年的双十一成交额数据如下: 年份成交额:亿元20090.520109.362011

vmware workstation 与 device/credential guard 不兼容

VM虚拟机报错 vmware虚拟机启动时报错&#xff1a;vmware workstation 与 device/credential guard 不兼容&#xff1a; 系统是win10专业版&#xff0c;导致报错原因最终发现是安装了docker&#xff0c;docker自带下载虚拟机Hyper-V&#xff0c;而导致vmware workstation 与 …

从0到0.01入门React | 009.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

网络安全在文档管理中的重要作用

无论它们存放在哪里&#xff0c;确保它们的安全都应该是首要任务。 随着文档管理继续从物理文件柜向数字数据库和云的长期过渡&#xff0c;网络威胁的可能性随着每一步和每次迁移而增加。因此&#xff0c;组织了解并解决文档管理和网络安全之间的联系至关重要。 文档管理的安…

Unity中Shader雾效的实现方法一

文章目录 前言一、在片元着色器中使用如下公式计算最终的颜色 lerp(雾效颜色&#xff0c;物体颜色&#xff0c;雾效混合因子)1、获取雾效颜色2、物体的颜色一般通过纹理采样得到&#xff0c;此处用 1 代替测试3、获取 雾效混合因子&#xff08;由 雾的距离 和 雾的浓度决定&am…