AtCoder Beginner Contest 330(A~F) abc330题解

Atcoder Beginner Contest 273 ABC A~F Atcoder ABC 273 A~F 阅读详情
AtCoder Beginner Contest 330
A - Counting Passes

统计有几个值 ≥ L \ge L ≥L

时间复杂度 O ( N ) O(N) O(N)

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int N, L;
    std::cin >> N >> L;

    int ans = 0;
    for (int i = 0; i < N; i++) {
        int x;
        std::cin >> x;
        ans += x >= L;
    }   

    std::cout << ans << "\n";

    return 0;
}
B - Minimize Abs 1

要使得 ∣ X i − A i ∣ ≤ m i n ∣ Y − A i ∣ |X_i - A_i| \le min|Y - A_i| ∣Xi​−Ai​∣≤min∣Y−Ai​∣,所以要使得不等式右边最小,Y的取值集合其实只有 L , R , A i {L,R,A_i} L,R,Ai​,所以只需要比较一下哪个值使得不等式右边的结果更小就好了。

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int N, L, R;
    std::cin >> N >> L >> R;
    std::vector<int> A(N);
    
    for (int i = 0; i < N; i++) {
        std::cin >> A[i];

        if (A[i] >= L && A[i] <= R) {
            std::cout << A[i] << " ";
            continue;
        }
        if (std::abs(L - A[i]) <= std::abs(R - A[i])) {
            std::cout << L << " ";
        } else {
            std::cout << R << " ";
        }
    }
    return 0;
}
C - Minimize Abs 2

显然就是一个枚举题。

枚举其中一个值,然后根据 D D D来求出另一个值,由于std::sqrt强转之后会向下取整变为int类型,因此每次需要枚举 y , y + 1 y,y+1 y,y+1两个数。每次更新式子的最小值。

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    i64 D;
    std::cin >> D;

    i64 ans = 1E18;
    for (i64 x = 0; ; x++) {
        i64 v = x * x;
        if (v > D) {
            break;
        }

        i64 z = std::sqrt(D - v);
        for (auto y : {z, z + 1}) {
            ans = std::min(ans, std::abs(x * x + y * y - D));
        }
    }

    std::cout << ans << "\n";
    return 0;
}
D - Counting Ls

本题要求形如

oo
o

这样方案的个数,这些o不要求一定相连,那其实我们只需要枚举那个关键节点然后每行每列计算一下除去当前枚举节点还剩下多少字符就好了,那么每次对答案的贡献就是 ( r o w − 1 ) × ( c o l − 1 ) (row-1) \times (col-1) (row−1)×(col−1),然后将贡献累加起来即可。

时间复杂度 O ( N 2 ) O(N^{2}) O(N2)

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int N;
    std::cin >> N;

    std::vector<std::string> S(N);
    for (int i = 0; i < N; i++) {
        std::cin >> S[i];
    }

    std::vector<int> row(N), col(N);
    for (int i = 0; i < N; i++) {
        row[i] = std::count(S[i].begin(), S[i].end(), 'o');
    }

    for (int j = 0; j < N; j++) {
        for (int i = 0; i < N; i++) {
            col[j] += S[i][j] == 'o';
        }
    }

    i64 ans = 0;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (S[i][j] != 'o') {
                continue;
            }
            i64 x = row[i] - 1, y = col[j] - 1;
            ans += x * y;
        }
    }

    std::cout << ans << "\n";
    return 0;
}
E - Mex and Update

题目要求对于每次操作之后求出当前序列的mex。

数据范围 2 E 5 2E5 2E5,也就是说我们需要有 O ( n l o g n ) O(nlogn) O(nlogn)的做法解决上述问题。

注意到mex的性质:当前序列中最小的没有出现的非负整数,因此mex的值至多不会超过 N N N。

所以考虑用 s t d : : s e t std::set std::set来维护可能成为mex的数值,同时用 s t d : : m a p std::map std::map来维护某个数值的数量,发生变化时根据情况判断对 s t d : : s e t std::set std::set进行增删。

时间复杂度 O ( ( N + Q ) l o g N ) O((N + Q)logN) O((N+Q)logN)

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int N, Q;
    std::cin >> N >> Q;

    std::vector<int> A(N);
    std::set<int> f;
    std::map<int, int> cnt;
    for (int i = 0; i < N + 5; i++) {
        f.emplace(i);
    }
    
    for (int i = 0; i < N; i++) {
        std::cin >> A[i];
        cnt[A[i]] += 1;
        if (cnt[A[i]] == 1) {
            f.extract(A[i]);
        }        
    }

    while (Q--) {
        int i, x;
        std::cin >> i >> x;
        i--;
        if (--cnt[A[i]] == 0) {
            f.emplace(A[i]);
        }

        A[i] = x;
        if (++cnt[A[i]] == 1) {
            f.extract(A[i]);
        }

        std::cout << *f.begin() << "\n";
    }

    return 0;
}
F - Minimize Bounding Square

题目是说要在规定操作步数之内最小化正方形边的值,容易想到二分答案。

至于check函数,我们一定是要将 X Y XY XY坐标分开来考虑的,然后来考虑这样一件事情:

如果在一条直线上有两点 a , b a,b a,b,想要在这条直线上再选择一个点 c c c,使得 d a c + d b c d_{ac}+d_{bc} dac​+dbc​的距离和最小,那么 c c c点一定在 a b ab ab之间。

再考虑本问题,计算 X X X坐标上的操作数时,先考虑 X X X坐标最外面的两个点,根据上面我们所考虑的,最外面两点到这个矩形的距离为

std::max(0, X[i] - X[j] - x),x为当前正在二分的边长。

Y Y Y坐标上的操作数也同理。

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int N;
    i64 K;
    std::cin >> N >> K;

    std::vector<int> X(N), Y(N);
    for (int i = 0; i < N; i++) {
        std::cin >> X[i] >> Y[i];
    }

    std::sort(X.begin(), X.end());
    std::sort(Y.begin(), Y.end());

    auto check = [&](int x) {
        i64 ans = 0;
        for (int i = 0, j = N - 1; i <= j; i++, j--) {
            ans += 1LL * std::max(0, X[j] - X[i] - x) + std::max(0, Y[j] - Y[i] - x);
        }

        // std::cerr << ans << "\n";
        return ans <= K;
    };
    int lo = -1, hi = int(1E9) + 1;
    while (hi - lo != 1) {
        int m = (lo + hi) / 2;
        if (check(m)) {
            hi = m;
        } else {
            lo = m;
        }
    }

    std::cout << hi << "\n";

    return 0;
}
ADBMS1818芯片  可测量多达18串电池电压 3 mV最大总测量误差 内置isoSPI接口 使用单根双绞线,长达100米 290 μs内可完成系统中所有单体电池电压测量。 阅读详情

相关推荐

Ubuntu22.04系统安装及配置

下载Ubuntu22.04系统镜像(下载地址:链接:https://caiyun.139.com/m/i?提取码:fLRJ),结合rufus和系统镜像制作USB启动盘,在物理机服务器上通过USB启动盘进行安装;或通过Esxi虚拟化平台创建虚拟机,然后在虚拟机中使用系统镜像进行安装。

cheagoun的博客 8万+

ABC330题解(A~F)

如果正方形左侧的点比右侧多,就往左侧移,否则往右侧移,直到左右两侧点数量相等。这个贪心策略之所以是正确的,是因为往点多的一侧移动一定会使答案减小。个数,所以超出这个区间的数我们都不用管它。次操作,每次操作可以选定一个点,并将其往上下左右四个方向中的一个移动。坐标是相互独立的,完全可以分开来算。,说明我们应该修改 set 中的值了。组成,且其中恰好两个在同一行,恰好两个在同一列。我们知道一个数的平方一定非负,所以考虑枚举。排序,取最中间的位置就是我们要找的位置了。的数量,枚举顶点直接统计就可以了。

qq_55312113的博客 524

高效静音黑科技 —— 单相直流无刷电机驱动器

然而,传统的BLDC电机驱动通常依赖于三相架构,电路复杂,成本高昂,且在低功率应用中显得有些“大材小用”。单相直流无刷电机驱动器作为一项高效、静音、经济的技术,正逐渐改变着各个领域的电机驱动方式。其精巧的控制策略、显著的优势以及广阔的应用前景,都预示着这项技术将在未来扮演越来越重要的角色。它相较于传统的三相驱动,显著简化了电路结构,降低了成本,尤其适用于低功率、对静音要求极高的应用场景。通过这些模块的协同工作,单相直流无刷电机驱动器能够实现对电机速度、扭矩的精确控制,并最大程度地降低噪声和振动。

wen8789的博客 1748

ABC 330 D-Counting Ls

用 (i,j) 表示格子中的单元格,其中 i 表示从上往下数的第 i 行,j 表示从左往右数的第 j 列。单元格的状态由 N 个长度为 N 的字符串 S₁, S₂, …这里,如果且仅当某个单元格恰好位于这三个单元格中的一个时,才认为两个三元组是不同的。如果 Sᵢ 的第 j 个字符是 o,则在单元格 (i,j) 中写有 o。如果 Sᵢ 的第 j 个字符是 x,则在单元格 (i,j) 中写有 x。,也就是有几个点可以被用来计算怪的数量。的拐角位置后,把它所处的行,列上的。为拐角位置可得到的“拐”的数量。

m0_68708655的博客 416

AntV G6避坑指南:折叠树状图那些意想不到的BUG(附解决方案)

本文深入剖析了在React项目中使用AntV G6实现折叠树状图时,从图标错乱、数据同步到状态管理的常见BUG与解决方案。文章基于实战经验,详细解读了G6的内部机制,提供了从环境配置、自定义节点绘制到事件处理与性能优化的完整避坑指南,帮助开发者彻底解决折叠展开功能的疑难杂症。

wasm7browser的博客 251

virtuoso--DFF

27-实验课-std_cell2

qq_61440044的博客 1994

AtCoder Beginner Contest 337 (ABCDEG题)

Toyota Programming Contest 2024#1(AtCoder Beginner Contest 337)的ABCDEG题目的讲解,具体见后面的视频

Edward Shi的博客 1791

STM32L433使用DSP库配置过程

STM32L433中有FPU,在使用中为了使用其中的部分函数,需要对其进行配置。     配置成功后做些总结,留待后续复习备忘,同时也希望有朋友像我一样使用DSP库配置时少走弯路,留作交流。

在在在的博客 4542

AtCoder Beginner Contest 330 题解

abc330题解

lvvqiao的博客 1239

相控阵雷达“相控”原理---多张动画示意图完美解释

很容易就能发现,相控阵雷达的天线由无数个小单元天线组成,这些小单元天线叫做“阵元”,对于有源相控阵雷达来说,每一个阵元都是独立控制的,它们既能独立发射雷达波,也能接收雷达波的回波信号。相控阵雷达可以在1秒内关机,1秒内开机,好处是,当军舰遇到依靠雷达信号进行引导的“反雷达导弹”时,可以迅速地把朝向来袭导弹方向的雷达关机,同时,其他方向的雷达保持开启。在过去,军舰上安装有不同种类的雷达,体积庞大、重不说,另一个麻烦是干扰,常常是,一种雷达工作时,另一种雷达就会受到干扰,严重的甚至不能同时工作。

muyangjun的专栏 1万+

数学与纳米技术:微观世界的数学描述

《数学与纳米技术:微观世界的数学描述》 关键词:纳米技术、数学模型、微观世界、物理现象、计算模拟 摘要:本文探讨了数学在纳米技术领域的应用,从数学基础回顾、纳米技术引论,到物理现象与

AI天才研究院 1519

AtCoder Beginner Contest 260 A~F 题解

A - A Unique Letter B - Better Students Are Needed! C - Changing Jewels D - Draw Your Cards E - At Least One F - Find 4-cycle G - Scalene Triangle Area Ex - Colorfulness

天生我材必有用,千金散尽还复来。 8344

【SpringBoot笔记44】SpringBoot多数据源配置(方式一:配置多个mapper扫描不同的包路径实现多数据源配置)

在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。SpringBoot考虑到了这一点,所以它是支持多数据源的配置的,下面介绍一下如何配置多数据源。

✅ Java 开发工程师 1109

AtCoder Beginner Contest 234

AtCoder Beginner Contest 234

青少年趣味编程 997

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

AtCoder Beginner Contest 334

AtCoder Beginner Contest 334

青少年趣味编程 1006

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AtCoder Beginner Contest 186

AtCoder Beginner Contest 186

青少年趣味编程 1061

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

AtCoder Beginner Contest 397

AtCoder Beginner Contest 397

青少年趣味编程 1005

AtCoder Beginner Contest 400

AtCoder Beginner Contest 400

青少年趣味编程 595

AtCoder Beginner Contest 235

AtCoder Beginner Contest 235

青少年趣味编程 1148

AtCoder Beginner Contest 322

AtCoder Beginner Contest 322

青少年趣味编程 737

AtCoder Beginner Contest 354

AtCoder Beginner Contest 354

青少年趣味编程 846

AtCoder Beginner Contest 393

AtCoder Beginner Contest 393

青少年趣味编程 986

Atcoder Beginner Contest 215

Atcoder Beginner Contest 215

青少年趣味编程 1101

AtCoder Beginner Contest 335

AtCoder Beginner Contest 335

青少年趣味编程 1122

AtCoder Beginner Contest 231

AtCoder Beginner Contest 231

青少年趣味编程 692

AtCoder Beginner Contest 216

AtCoder Beginner Contest 216

青少年趣味编程 1053
上一篇: AtCoder Beginner Contest 329
下一篇: E. Iva & Pav
Fr1nGeLove
博客等级 码龄5年 173粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值