AtCoder Beginner Contest 330 A~F

news2024/11/16 1:25:40

A.Counting Passes(暴力)

题意:

给定 n n n个学生的分数,以及及格分 x x x ,问多少人及格了。

分析:

暴力枚举,依次判断每个学生的分数即可。

代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n, l;
    cin >> n >> l;
    int ans = 0;
    while (n--) {
        int x;
        cin >> x;
        ans += (x >= l);
    }
    cout << ans << endl;
    return 0;
}

B.Minimize Abs 1(数学)

题意:

回答 n n n 个问题,每个问题给定 a , l , r a,l,r a,l,r,问函数 f ( x ) = ∣ x − a ∣ f(x)=|x−a| f(x)=xa [ l , r ] [l,r] [l,r]的最小值。

分析:

全定义域下,最小值显然在 x = a x=a x=a 取得。绝对值函数图像是 V V V 型。
现在定义域限定在 [ l , r ] [l,r] [l,r],则分 a ≤ l , a ≥ r , l < a < r a \le l,a \ge r,l \lt a \lt r al,ar,l<a<r 三种情况分别讨论极值即可。即分别在 x = l , x = r , x = a x=l,x=r,x=a x=l,x=r,x=a取得最小值。

代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n, l, r;
    cin >> n >> l >> r;
    while (n--) {
        int a;
        cin >> a;
        if (a <= l)
            cout << l << ' ';
        else if (a >= r)
            cout << r << ' ';
        else
            cout << a << ' ';
    }
    return 0;
}

C.Minimize Abs 2(数学)

题意:

给定整数 d d d,问函数 f ( x , y ) = ∣ x 2 + y 2 − d ∣ f(x,y)=|x^2+y^2−d| f(x,y)=x2+y2d的最小值。

分析:

枚举 x x x的取值,范围是 [ 1 , 2 e 6 ] [1,2e6] [1,2e6],然后得 y 2 = a b s ( d − x ∗ x ) y^2=abs(d−x∗x) y2=abs(dxx),分别取 y 1 = ⌊ y ⌋ , y 2 = ⌈ y ⌉ y_1=\lfloor\sqrt{y}\rfloor,y_2=\lceil\sqrt{y}\rceil y1=y ,y2=y ,由于会有一正一负的情况 ( x 2 + ( y 1 ) 2 ≤ d , x 2 + ( y 2 ) 2 ≥ d ) (x^2+(y_1)^2 \le d,x^2+(y_2)^2 \ge d) (x2+(y1)2d,x2+(y2)2d),取 m i n ( f ( x , y 1 ) , f ( x , y 2 ) ) min(f(x,y1),f(x,y2)) min(f(x,y1),f(x,y2)),对所有 x x x 取最小值即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
    LL d;
    cin >> d;
    int up = 2e6;
    LL ans = 1e18;
    for (int i = 0; i <= up; ++i)
    {
        LL x = 1ll * i * i;
        LL y = abs(d - x);
        LL y1 = floor(sqrt(y)), y2 = ceil(sqrt(y));
        ans = min({ans, abs(x + y1 * y1 - d), abs(x + y2 * y2 - d)});
    }
    cout << ans << endl;
    return 0;
}

D.Counting Ls(思维,枚举)

题意:

给定一个包含o或者x的二维矩阵。问所有满足下述条件的三元组下标数量。

  • 该三元组上的字符在矩阵中的位置各不相同,但是都是o
  • 该三元组中,其中两个字符在同一行,其中两个字符在同一列。

分析:

如果二维矩阵的一个位置的字符为o时,该字符可以作为中间点产生的贡献为 ( r o w [ i ] − 1 ) ∗ ( c o l [ j ] − 1 ) (row[i]-1)*(col[j]-1) (row[i]1)(col[j]1),其中 r o w [ i ] row[i] row[i]表示该行o的个数, c o l [ i ] col[i] col[i]表示该列 o 的个数。累计这些答案计数即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

string s[2005];
int row[2005], col[2005];

int main(){
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> s[i];
        for (int j = 0; j < n; j++) {
            if (s[i][j] == 'o') {
                row[i]++;
                col[j]++;
            }
        }
    }
    LL ans = 0;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j) {
            if (s[i][j] == 'o') {
                ans += 1ll * (row[i] - 1) * (col[j] - 1);
            }
        }
    cout << ans << endl;
    return 0;
}

E.Mex and Update(思维,数据结构)

题意:

给定一个数组 a a a,进行如下操作。每次操作令 a i = x a_i=x ai=x。然后输出 m e x ( a ) mex(a) mex(a)

m e x ( a ) mex(a) mex(a)表示数组 a a a未出现的最小非负整数

分析:

考虑如何求出一个数组的 m e x mex mex,我们可以用一个 m a p map map表示数字 i i i的出现次数,那每次求 m e x mex mex可以从小到大遍历该数组,找到第一个出现次数为 0 0 0的下标即是答案。

但这复杂度可能会高达 O ( n ) O(n) O(n),考虑更快速的方法,我们可以用 s e t set set储存 m a p map map中值为 0 0 0(未出现的数)下标,这样 s e t set set中的最小值就是答案。

a i = x a_i=x ai=x时,相当于把原来的 a i a_i ai删掉,即 m p [ a i ] mp[a_i] mp[ai]−−,然后把 x x x加进来,即 m p [ x ] mp[x] mp[x]++,如果 m p [ a i ] mp[a_i] mp[ai]变为 0 0 0,则说明 a i a_i ai没有出现,将其插入到 s e t set set中。同时 m p [ x ] mp[x] mp[x]变为 1 1 1,说明 x x x出现了,从 s e t set set中删去。

这样就可以动态维护 m e x mex mex值,此时的每次操作的时间复杂度为 O ( l o g n ) O(logn) O(logn)

hint:

  • 包含 n n n个数的数组可能的 m e x mex mex 0 ∼ n 0 \sim n 0n

  • s e t set set可以通过 b e g i n ( ) begin() begin()方法取出头部元素的迭代器,然后通过解地址符*取出对应的值。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int a[200005];
map<int, int> mp;
set<int> mex;
int main(){
    int n, q;
    cin >> n >> q;
    for (int i = 1; i <= n; ++i){
        cin >> a[i];
        mp[a[i]]++;
    }
    for (int i = 0; i <= n; ++i){
        if (mp[i] == 0){
            mex.insert(i);
        }
    }
    while (q--){
        int i, x;
        cin >> i >> x;
        if (mp[a[i]] == 1){
            mex.insert(a[i]);
        }
        mp[a[i]]--;
        if (mp[x] == 0){
            mex.erase(x);
        }
        mp[x]++;
        a[i] = x;
        cout << *mex.begin() << endl;
    }
}

F.Minimize Bounding Square(二分,前缀和)

题意:

二维平面上 n n n个点,可进行最多 k k k 次操作,每次操作将一个点上下左右移动一格。点可以重叠。问进行若干次操作后,能将所有点覆盖的正方形的边长的最小值。

分析:

x x x y y y两个维度相互独立,我们可以分别考虑每个维度。

考虑一维情况下,如果我们固定覆盖的线段长度,会发现比较好做。注意到如果边长越大,我们需要的移动次数越少,可行的可能性就越高,相反,边长越小,需要移动的次数越多,可行的可能性就越低。

这里有一个单调性,因此我们可以二分最终的边长。问题转化为给定数轴上 n n n个点,可以在数轴上放置一个区间,要求所有点到达区间内的最小移动距离,若该区间是一个点,则是一个经典问题,取中位数即可。

此题中不难发现最优选法区间的左端点或者右端点一定是其中某个点,可以枚举所有情况然后利用二分与前缀和去优化计算距离

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
LL k;
const int maxn = 2e5 + 5;
LL x[maxn], y[maxn], sx[maxn], sy[maxn];
LL calc(LL *p, LL *s, int mid){
    LL res = 1e18;
    for (int i = 1; i <= n; i++){
        LL v = 1ll * i * p[i] - s[i];
        int R = p[i] + mid;
        int l = 1, r = n;
        while (l < r){
            int mid = l + r >> 1;
            if (p[mid] > R)
                r = mid;
            else
                l = mid + 1;
        }

        if (p[r] > R)
            v += s[n] - s[r - 1] - 1ll * (n - r + 1) * R;
        res = min(res, v);
    }

    for (int i = n; i; i--){
        LL v = s[n] - s[i - 1] - 1ll * (n - i + 1) * p[i];
        int L = p[i] - mid;
        int l = 1, r = n;
        while (l < r){
            int mid = l + r + 1 >> 1;
            if (p[mid] < L)
                l = mid;
            else
                r = mid - 1;
        }

        if (p[r] < L)
            v += 1ll * r * L - s[r];
        res = min(res, v);
    }

    return res;
}
LL check(LL value){
    LL v1 = calc(x, sx, value), v2 = calc(y, sy, value);
    return v1 + v2 <= k;//v1+v2<=k时返回1,否则返回0
}
int main(){
    cin >> n >> k;
    for (int i = 1; i <= n; i++){
        cin >> x[i] >> y[i];
    }
    sort(x + 1, x + 1 + n);
    sort(y + 1, y + 1 + n);
    for (int i = 1; i <= n; i++){
        sx[i] = sx[i - 1] + x[i];
        sy[i] = sy[i - 1] + y[i];
    }
    LL l = 0, r = 1e9;
    while (l < r) {
        int mid = l + r >> 1;
        if (check(mid))
            r = mid;
        else
            l = mid + 1;
    }
    cout << r << endl;
    return 0;
}

学习交流

以下学习交流QQ群,群号: 546235402,大家可以加群一起交流做题思路,分享做题技巧,欢迎大家的加入。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stability AI 新发布SDXL Turbo:一款实时文本到图像生成模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Word异常退出文档找回怎么操作?4个正确恢复方法!

“刚刚我在用word编辑文档&#xff0c;但是突然word就显示异常了&#xff0c;然后莫名其妙就自动退出了&#xff0c;这可怎么办&#xff1f;我还有机会找回这些文档吗&#xff1f;” 当我们在使用Microsoft Word时&#xff0c;突然遭遇到程序异常退出的情况&#xff0c;可能会让…

四个方法,设置excel文件只读模式

由于excel文件经常用于数据文件&#xff0c;数据就需要特别保护&#xff0c;大家可能需要将文件设置为只读模式来保护数据不被修改&#xff0c;Excel文件想要设置为只读的方法有很多&#xff0c;今天分享四种方法给大家&#xff1a; 方法一&#xff1a;文件属性 右键点击文件…

面试篇之微服务(一)

目录 概览 1.什么是微服务&#xff1f; 2.微服务带来了哪些挑战&#xff1f; 3.现在有哪些流行的微服务解决方案&#xff1f; 这三种方案有什么区别吗&#xff1f; 4.说下微服务有哪些组件&#xff1f; 注册中心 5.注册中心是用来干什么的&#xff1f; 6.SpringCloud可…

Android Studio Giraffe-2022.3.1-Patch-3安装注意事项

准备工作&#xff1a; android studio下载地址&#xff1a;https://developer.android.google.cn/studio/releases?hlzh-cn gradle下载地址&#xff1a;https://services.gradle.org/distributions/ 比较稳定的网络环境&#xff08;比较android studio相关的依赖需要从谷歌那边…

spring cloud Eureka注册中心和Nacos注册中心

文章目录 Eureka注册中心.Eureka的结构和作用搭建eureka-server创建 服务引入eureka依赖编写启动类编写配置文件启动服务 服务注册1&#xff09;引入依赖2&#xff09;配置文件3&#xff09;启动多个user-service实例 服务发现1&#xff09;引入依赖2&#xff09;配置文件3&…

日本MF备案注册数据库-在线免费查询

在日本&#xff0c;药物主文件&#xff08;DMF&#xff09;称为“主文件”或“MF”。 药物主文件&#xff08;DMF&#xff09;系统允许活性药物成分&#xff08;API&#xff09;的制造商向日本审查机构&#xff08;PMDA&#xff09;提交API的详细信息&#xff08;制造方法、数…

免费的电脑AI写作工具-5款好用的智能AI写作软件

随着人工智能&#xff08;AI&#xff09;技术的不断进步&#xff0c;电脑AI写作已经成为现代写作领域的一项不可或缺的工具。通过深度学习和自然语言处理的融合&#xff0c;AI写作软件得以模拟人类的创造性和表达能力&#xff0c;为我们提供了快速、高效地生成优质文字内容的可…

硫酸钡行业分析:预计2028年将达到8.3亿美元

硫酸钡常用于消化道造影&#xff0c;据国内使用者报道&#xff0c;粗细不匀型硫酸钡&#xff0c;优于细而匀的硫酸钡。硫酸钡是一种用于白色颜料、纸张、橡胶、X光检查时使用的填充剂。具有低硬度、接近直角交叉的完全解理、高密度、遇盐酸不起泡沫的板状结晶&#xff0c;与类似…

论文阅读——SEEM

arxiv: 分割模型向比较灵活的分割的趋势的转变&#xff1a;封闭到开放&#xff0c;通用到特定、one-shot到交互式。From closed-set to open-vocabulary segmentation&#xff0c;From generic to referring segmentation&#xff0c;From one-shot to interactive segmentati…

微服务--06--Sentinel 限流、熔断

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.微服务保护雪崩问题服务保护方案1.1.请求限流1.2.线程隔离1.3.服务熔断 2.Sentinel2.1.介绍和安装官方网站&#xff1a;[https://sentinelguard.io/zh-cn/](https…

如何使用MES管理系统管理与统计员工绩效

MES管理系统解决方案在生产流程优化中发挥着至关重要的作用&#xff0c;特别是在员工绩效的统计与管理方面。本文深入探讨了MES管理系统如何通过多种方式&#xff0c;包括实时数据采集、生产过程可视化、以及绩效指标设定与评估&#xff0c;以更精准、全面的方式统计员工绩效&a…

儿童绘本故事之乐小鱼的龙舟体验

《乐小鱼的龙舟体验》 Chapter 1: 破浪前行的盛宴在2023年11月26日的清晨&#xff0c;顺德迎来了一场震撼心灵的盛宴——中国龙舟大奖赛。湖面上&#xff0c;龙舟竞渡&#xff0c;破浪前行&#xff0c;为这座城市注入了一份激情的节奏。On the morning of November 26, 2023, …

JSON 与 FastJSON

JSON 与 FastJSON JSON JavaScript Object Notation&#xff08;JavaScript 对象表示法&#xff09;是目前最常用的执行对象序列化的方式。 虽然 json 最初是为了在 JavaScript 语言中使用的&#xff0c;但实际上 json 本身跟语言没有任何关系&#xff0c;各种编程语言都可以使…

广州华锐视点:3D毒品预防专题教育平台帮助青少年提升拒毒意识

随着科技的不断发展&#xff0c;人们的生活方式也在不断地改变。在这个信息爆炸的时代&#xff0c;传统的普法教育方式已经无法满足人们的需求。为了适应这一变化&#xff0c;越来越多的教育机构开始尝试利用现代科技手段进行普法教育。其中&#xff0c;3D毒品预防专题教育平台…

C++基础 -21-多继承与多级继承

多继承 代码示例 #include "iostream"using namespace std;class base1 { public:base1() {}base1(int a, int b) : a(a), b(b) {}int a;protected:int b; };class base2 { public:base2() {}base2(int a, int b) : c(a), d(b) {}int c;protected:int d; };class …

开启虾皮购物新旅程,快速注册买家号

想要在shopee上畅享丰富的购物体验吗&#xff1f;那就让我们一起迈出第一步&#xff0c;注册一个属于你自己的虾皮买家号吧&#xff01; 1. 访问虾皮平台 首先&#xff0c;打开你的浏览器&#xff0c;输入虾皮平台网址&#xff0c;点击注册或登录按钮。这将引导你进入注册界面…

Python语言学习笔记之七(JOSN应用)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 1、认识Json JSON (JavaScript Obiect Notation)是一种轻量级的数据交换格式&#xff0c;它是ECMAScript的一…

计算机毕业设计 基于Web的课程设计选题管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Python中基于Pandas的Excel工具类,一文掌握!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中处理Excel时&#xff0c;Pandas库是一个强大且灵活的工具。它不仅能够轻松处理数据分析任务&#xff0c;还能用于创建、读取和写入Excel文件。在本文中&#xff0c;将探讨如何使用Pandas库封装一个Exc…