[ARC126C] Maximize GCD 题解
1.[ARC126C] Maximize GCD 题解
2.[ARC126D] Pure Straight 题解3.[ABC215D] Coprime 2 题解4.CF793F Julia the snail 题解5.CF1845D Rating System 题解6.[JOI 2023 Final] Advertisement 2 题解7.CF1513D GCD and MST 题解8.「JOISC 2016 Day 2」雇佣计划 题解9.[ABC134F] Permutation Oddness 题解10.CF1188D Make Equal 题解11.[ARC096E] Everything on It 题解12.[ARC117D] Miracle Tree 题解13.[JOISC 2014 Day3] 电压 题解14.CF803C Maximal GCD 题解15.CF1787E The Harmonization of XOR 题解16.CF1762D GCD Queries 题解17.[AGC061C] First Come First Serve 题解18.CF1575G GCD Festival 题解19.CF1656D K-good 题解20.CF1823F Random Walk 题解21.[ABC297G] Constrained Nim 2 题解22.CF1762E Tree Sum 题解23.CF1798E Multitest Generator 题解24.P7486 「Stoi2031」彩虹 题解25.CF1485C Floor and Mod 题解26.CF1681E Labyrinth Adventures 题解27.CF1023F Mobile Phone Network 题解28.CF258D Little Elephant and Broken Sorting 题解29.P7485 「Stoi2031」枫 题解30.[AGC030D] Inversion Sum 题解31.CF1815D XOR Counting 题解32.CF1864B Swap and Reverse 题解33.CF1864C Divisor Chain 题解34.CF1174E Ehab and the Expected GCD Problem 题解35.[AGC051B] Bowling 题解36.CF1626F A Random Code Problem 题解37.CF915G Coprime Arrays 题解38.[ABC318E] Sandwiches 题解39.[ABC318G] Typical Path Problem 题解40.CF838D Airplane Arrangements 题解41.[ABC319G] Counting Shortest Paths 题解42.[ABC313F] Flip Machines 题解43.[ABC320F] Fuel Round Trip 题解44.[ARC125B] Squares 题解45.[ARC124C] LCM of GCDs 题解46.[ARC135C] XOR to All 题解47.CF1874C Jellyfish and EVA 题解48.[ARC136C] Circular Addition 题解49.[ARC150D] Removing Gacha 题解50.高橋君 题解51.CF1842G Tenzing and Random Operations 题解52.[ARC167D] Good Permutation 题解53.[AGC061A] Long Shuffle 题解54.[ARC104B] DNA Sequence 题解55.[ARC104C] Fair Elevator 题解56.[ARC104D] Multiset Mean 题解57.[ARC104E] Random LIS 题解58.[ABC327G] Many Good Tuple Problems 题解59.[ARC105C] Camels and Bridge 题解60.[ARC105D] Let's Play Nim 题解61.[ARC105E] Keep Graph Disconnected 题解62.[ARC105F] Lights Out on Connected Graph 题解63.[ARC106E] Medals 题解64.[ARC107F] Sum of Abs 题解65.[ARC106F] Figures 题解题意
给定一个序列
题解
首先,如果
如果
可以把原题的条件进行转化
又因为题目要求的是最大值,所以从大到小枚举即可。接下来考虑如何判定。
设当前枚举的答案是
设
Code
#include <bits/stdc++.h>
typedef long long valueType;
typedef std::vector<valueType> ValueVector;
class TreeArray {
public:
typedef ValueVector container;
private:
valueType size;
container data;
static valueType lowBit(valueType x) {
return x & -x;
}
public:
explicit TreeArray(valueType n) : size(n), data(size + 1, 0) {};
void insert(valueType pos, valueType key) {
while (pos < size) {
data[pos] += key;
pos += lowBit(pos);
}
}
valueType sum(valueType pos) const {
valueType result = 0;
while (pos > 0) {
result += data[pos];
pos -= lowBit(pos);
}
return result;
}
};
constexpr valueType \maxA = 6e5 + 5;
int main() {
std::ios_base::sync_with_stdio(false);
valueType N, K;
std::cin >> N >> K;
if (N == 1) {
valueType A;
std::cin >> A;
std::cout << (A + K) << std::endl;
return 0;
}
ValueVector source(N);
for (auto &iter: source)
std::cin >> iter;
TreeArray sum(\maxA), count(\maxA);
valueType \max = 0;
for (auto const &iter: source) {
\max = std::\max(\max, iter);
sum.insert(iter, iter);
count.insert(iter, 1);
}
typedef std::function<bool(valueType)> CheckFunction;
CheckFunction check = [\max, &sum, &count, K](valueType n) -> bool {
valueType result = 0;
for (valueType i = n; i <= \max + n; i += n)
result += i * (count.sum(i) - count.sum(i - n)) - (sum.sum(i) - sum.sum(i - n));
return result <= K;
};
valueType const minK = N * \max - sum.sum(\max);
if (K >= minK) {
std::cout << (\max + (K - minK) / N) << std::endl;
} else {
for (valueType i = \max; i >= 1; --i) {
if (check(i)) {
std::cout << i << std::endl;
return 0;
}
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现