首页 > 其他分享 >CF1891B Deja Vu 题解

CF1891B Deja Vu 题解

时间:2024-04-10 17:45:23浏览次数:19  
标签:fr ll 题解 bmod cin book Vu Deja 复杂度

建议凭橙,思路橙,码量红到橙。

题面

思路

一,暴力

直接依照题意模拟,复杂度 \(O(tqn^2)\),看一眼数据范围,妥妥 T 飞,倒在第三个点。

二,逐步优化

看一眼数据发现,虽然 \(q\) 很大,但实际上 \(x\) 只有三十个值,因此首先预处理出从 \(2^1\) 到 \(2^{30}\) 的所有值,摘掉一个 \(n\),复杂度 \(O(tqn)\)。

接下来不管怎样,即使把复杂度优化到 \(O(tq)\),复杂度依旧非常的高。\(t\) 组数据是不可能去掉的,因此考虑去掉 \(q\)。使复杂度变为 \(O(tn)\) 或者 \(O(tn)\) 的近似值。

考虑到对于每一个 \(a_i\),当它满足某一个 \(a_i \bmod 2^x=0\) 时。则 \((a_i+2^{x-1}) \bmod 2^x\) 此时一定不为 \(0\)。说人话就是当一个数被 \(2^x\) 整除过后,它就不会再能够整除这个 \(2^x\)。

简单证明一下,当 \(a_i \bmod 2^x=0\) 时,对于 \((a_i+2^{x-1}) \bmod 2^x\),等价于 \(a_i \bmod 2^x+2^{x-1} \bmod 2^x\)。很明显 \(a_i \bmod 2^x=0\) 而 \(2^{x-1} \bmod 2^x \ne 0\) 恒成立。即使在经过多个不同的 \(2^x\) 的处理后,这个结论依旧成立。

所以在 \(\text{AC}\) 代码中,对于每组数据,用一个数组 \(\text{book}\) 记录 \(x\) 是否出现过,复杂度 \(O(tn)\)。

代码

#include<bits/stdc++.h>
#define ll long long
#define fr(i , a , b) for(ll i = a ; i <= b ; ++i)
#define fo(i , a , b) for(ll i = a ; i >= b ; --i)
using namespace std;
ll t , n , a[100005] , q , x;
ll qp[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};
ll book[31];
//priority_queue<ll> q;
//priority_queue <ll , vector<ll> , greater<ll> > q;
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> t;
	while(t--)
	{
		cin >> n >> q;
		fr(i , 1 , n)
		{
			cin >> a[i];
		}
		while(q--)
		{
			cin >> x;
			if(book[x])
			{
				continue;
			}
			book[x] = 1;
			fr(i , 1 , n)
			{
				if(a[i] % qp[x] == 0)
				{
					a[i] += qp[x - 1];
				}
			}
		}
		memset(book , 0 , sizeof(book));
		fr(i , 1 , n)
		{
			cout << a[i] << ' ';
		}
		cout << '\n';
	}
 	return 0;
}

标签:fr,ll,题解,bmod,cin,book,Vu,Deja,复杂度
From: https://www.cnblogs.com/xhqdmmz/p/18126532

相关文章

  • P9750 [CSP-J 2023] 一元二次方程 题解
    题面。直接依照题意模拟即可,注意细节。细节第一注意输出分式时分母为\(1\)不输出,分子为\(0\)直接输出零且不带正负号。第二约分时,\(gcd\)内的两个数应该都是非负实数。第三可以单独输出符号,注意别有多余的符号。第四当方程有两根且均是有理数时,要根据\(2a\)的正......
  • CF1815A Ian and Array Sorting 题解
    题面。直接进入主题吧。思路题目要求非递减序列,很明显,由题目给的操作,一定可以将这个序列的前\(n-1\)项能够满足是非递减序列,最后只需要比较第\(n\)项是否大于等于第\(n-1\)项即可。解释一下为什么。对于序列\(a\),从\(a_1\)开始到\(a_{n-1}\)结束,每次对\(a_i\)......
  • CF1909C Heavy Intervals 题解
    一种似乎更快抽象的解法?题面正文看这道题,给定序列\(l,r,c\),要求重构\(l,r,c\)使得\(\sum_{i=1}^n(r_i-l_i)\timesc_i\)最小。首先可以想到的就是尽量让小的\(r_i-l_i\)乘上大的\(c_i\)。这样子看来\(c_i\)几乎不需要更多的处理,仅需从小到大(或从大到小)排个序。来......
  • GitHub问题解决新突破,复旦大学MAGIS框架大幅超越GPT-4
    获取本文论文,请关注公众号【AI论文解读】回复:&nbsp;论文解读引言:GitHub问题解决的挑战与LLMs的潜力在软件开发的演进过程中,解决GitHub仓库中出现的问题是一个复杂的挑战。这不仅涉及到新代码的加入,还要维护现有功能的稳定运行。大型语言模型(LLMs)在代码生成和理解方......
  • vue中:key 的特殊使用
    1.常用的使用方法v-for 结合使用1<ul>2<liv-for="iteminitems":key="item.id">...</li>3</ul>唯一的key值在做虚拟DOM算法时尤为重要2.触发子组件并进行更新组件让其发生变化1<childrenComponentsv-model="files":key="uploadKey&q......
  • Air Conditioner 题解
    [AirConditioner]题意简述题目链接。给定一个整数\(n\),每秒钟可以选择使\(n\)增加\(1\)或减少\(1\)或不改变,有\(M\)个询问,对于第\(i\)个询问,给定\(t_i,l_i,r_i\),表示询问在第\(t_i\)秒时,是否有\(n\in[l_i,r_i]\)。如果能满足所有的询问,输出YES,否则输出NO。......
  • vue简单的响应式布局
    <template><el-container><el-header>头部</el-header><el-container><!--准备两份aside侧边栏--><!--利用isCollapse动态控制侧边栏的宽度--><el-aside:width="isCollapse?'64px':'......
  • 【Vue I18n 国际化插件】vue3+vue-i18n 项目实战总结
    一、为什么要国际化?前端国际化:应用要服务于不同的地区的用户,所以应用不能单一语言;应用要能让不同地区的人无障碍使用就需要实现国际化。目前在各大商城项目中,对于国际化语言的需求越来越高了,其中最多的就是vue项目使用i18n插件实现多语言切换功能。前端国际化:应用要......
  • vue3复盘学习(一)
    其实说是复盘,因为在平常的开发中因为公司一些项目和其他原因断断续续的使用了一段时间vue3,因为着急赶项目,有些知识点没有系统性学习,所以决定从今天开始一点点再学习一遍٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ哈哈!刚开始从vue2过渡到vue3的同学们其实是有些不适应的,但是随着前端框......
  • Vue — Vue面试题:Vue3.0 特性
    CompositionAPI(组合式API):CompositionAPI允许开发者将逻辑按照功能或者相关性进行组织,而不是按照选项的不同部分(如data、methods、computed等)来分散代码。这种方式更灵活、更易于复用和维护,特别适用于编写大型复杂的组件。基于Proxy的响应式系统:Vue3中的响应式系统基于ES6......