首页 > 其他分享 >Deltix Round, Autumn 2021 (open for everyone, rated, Div. 1 + Div. 2) A. Divide and Multiply

Deltix Round, Autumn 2021 (open for everyone, rated, Div. 1 + Div. 2) A. Divide and Multiply

时间:2023-09-16 09:00:26浏览次数:47  
标签:std everyone cdot Autumn int alpha Div

有一个长为 \(n\) 的数组,可以执行以下整份操作任意次:

  • 选择任意两个数 \(a_i, a_j\) ,满足 \(2 \mid a_i\)
  • \(a_i = \frac{a_i}{2}\)
  • \(a_j = 2 \cdot a_j\)

请找到经过任意此操作后的最大 \(\sum_{i=1}^{n} a_i\) 。

在唯一分解定理下讨论两个数 \(a_i = 2^{\alpha_i} \cdot x, a_j = 2^{\alpha_j} \cdot y\) 。显然有

\[2^{\alpha_i} \cdot x + 2^{\alpha_j} \cdot y \leq x + 2^{\alpha_j + \alpha_i} \cdot y \]

加号变乘号更优。

于是提取出所有 \(a_i\) 的 \(2\) 的幂次 \(tot\) 。此时将 \(2^{tot}\) 统一贡献到 \(max(a_i)\) 的位置最优。

时间复杂度 \(O(w n)\) ,但是数据范围可能会很大。

view
#include <bits/stdc++.h>
void solve() {
	int n; std::cin >> n;
	std::vector<long long> a(n+1);
	int cnt = 0; for (int i = 1; i <= n; i++) {
		std::cin >> a[i];
		int t = __builtin_ctzll(a[i]);
		a[i] >>= t; cnt += t;
	}
	int l = std::max_element(a.begin()+1, a.end()) - a.begin(); a[l] <<= cnt;
	long long sum = 0; for (int i = 1; i <= n; i++) sum += a[i];
	std::cout << sum << '\n';
}
signed main() {
    int _ = 1; std::cin >> _;
    while (_--) solve();
	return 0;
}

标签:std,everyone,cdot,Autumn,int,alpha,Div
From: https://www.cnblogs.com/zsxuan/p/17706270.html

相关文章

  • 如何使用透明的div实现页面背景模糊效果
    要在页面背景上实现模糊效果,并使内容区域(<div>)保持半透明,你可以使用CSS的backdrop-filter属性。这个属性可以用于设置页面背景的滤镜效果,而不影响内部内容的模糊。下面是一个示例的代码片段,展示如何实现这个效果:<!DOCTYPEhtml><html><head><title>背景模糊效果</title>......
  • Codeforces Round 764 (Div. 3) B. Make AP
    有三个正整数\(a,b,c\)。需要执行以下操作严格一次:选择任意一个正整数\(m\)并让严格一个\(a,b,c\)之一乘以\(m\)。但不能改变他们的顺序。回答是否可以经过一次操作后使\(a,b,c\)变为等差。分类讨论题:三种情况满足一种即可。(已知\(a,b,c\geq1\))\(ma......
  • Codeforces Round 773 (Div. 2) B. Power Walking
    有\(n\)个增幅道具,第\(i\)个道具种类为\(a_i\),一个人的强度\(w\)为他所有道具的种类数。对于\(k]\in[1,n]\),询问将\(n\)个道具分配给\(k\)个人且每个人至少分配到一个道具后,能够得到的最想强度和\(\sum_{i=1}^{n}w_i\)。观察一:最低强度和\(\sum_{i=1}^{k}w......
  • Codeforces Round 897 (Div. 2) 考试总结
    前言这次打得很好,相较于div3的脑残题和签到题来说,div2的思维难度更加的大。同时还有除传统题外,其他的题型出现。比如交互题等。这次能在考场上想出三道较于之前是有很大的进步的。赛时实况:ABCDE1E2F√√√××××赛后改题情况:ABCDE1E2F......
  • 9.12 div.1
    EducationalCodeforcesRound100(RatedforDiv.2)EducationalCodeforcesRound101(RatedforDiv.2)EducationalCodeforcesRound102(RatedforDiv.2)B-FindTheArray思路:相邻的数要有一方能整除另一方,那么一方为1的话一定可以,按奇偶位置将数分为两部分,求出a......
  • Codeforces Round 781 (Div. 2) B. Array Cloning Technique
    给一个长度为\(n\)的数组\(a\)。开始只有一份所给\(a\)的副本。你可以做以下两种操作:选择任意一个副本并且克隆它,然后将会多出一个克隆副本。交换两个元素,他们属于任意两个副本(可能是同一个)。需要判断最小操作数,使有一个副本的所有元素相同。观察一:只需要在开始的副本......
  • Codeforces Round 787 (Div. 3) B. Make It Increasing
    给一个长为\(n\)的数组\(a_1,a_2,\cdots,a_n\quad(0\leqa_i\leq10^9)\)。可以执行以下操作任意次:选择任意一个\(a_i\)并且执行\(a_i=\lfloor\frac{a_i}{2}\rfloor\)。输出最小操作次数,使得数组所有元素变为严格递增。观察:数组一些位置变小,将数组变为严......
  • Codeforces Round 791 (Div. 2) A. AvtoBus
    已知有\(n\)个轮子,会有一个车队车来换轮,且恰好使用完这些轮子。只知道这些车中有\(4\)轮车和\(6\)轮车。你需要估计这个车队最少可能有多少车和最多可能有多少车,或判断这是完全不可能的。观察:\(4x+6y=n\),由裴蜀定理,当\(2\midn\)有解且\(2x+3y=\frac{n}{2}\)......
  • Codeforces Round 897 (Div. 2)
    目录写在前面ABCDE1/E2F写在最后写在前面比赛地址:https://codeforces.com/contest/1867。简略题解。还好没掉分。A令原数列中第\(k\)大对应\(k\)即可。///*By:Luckyblock*/#include<bits/stdc++.h>#defineLLlonglongconstintkN=4e4+10;//============......
  • Codeforces Round 897 (Div. 2)
    F.MostDifferentTree当\(n=2\)时,只能构造一条长度为\(2\)的链。当\(n\ge3\)时,对于\(i\)\((1\lei\len)\),以\(i\)作为根的树记为\(h_i\),考虑枚举树找一个大小为\(s\)的树\(t\),使得不存在任何一个\(h_i=t\),且\(s\)尽可能小,然后从\(1\)连一条链到该数的根......