AtCoder Beginner Contest 318 A-E题解

AtCoder从小白到大神的进阶攻略 摘自https://www.cnblogs.com/LHYLHY/p/11572011.html 在此对作者表示感谢 AtCoder从小白到大神的进阶攻略 前言 现在全球最大的编程比赛记分网站非CodeForces和AtCoder莫属了,@ezoixx130大佬已经在去年介绍过CodeForces了(传送门),那么现在我们主要谈一下AtCoder。 简介 A... 阅读详情

比赛链接:https://atcoder.jp/contests/abc318
比赛时间:2023年9月2日 20:00-21:40

A题:Full Moon

标签:模拟、数学
题意:给定一个起始 m m m和上限 n n n,每次增量 p p p,求能加几次。
题解:数据比较小,可以直接暴力;数学方法算的话,注意边界。
代码:

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

int main() {
    int n, m, p;
    cin >> n >> m >> p;
    int ans = 0;
    for (int i = m; i <= n; i += p) {
        ans++;
    }
    cout << ans << endl;
    return 0;
}

B题:Overlapping sheets

标签:模拟、暴力
题意:给定 n n n个矩形的覆盖区域,求最终地图被覆盖的区域面积。
题解:数据比较小,直接二维数组标记对应点就好了,实际标记的时候,可以让$ j<b、k<d$,使得后面算面积的时候 直接计算覆盖的点的范围就好了。
代码:

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

int s[200][200];
int main() {
    int n;
    cin >> n;
    int a, b, c, d;
    for (int i = 1; i <= n; i++) {
        cin >> a >> b >> c >> d;
        for (int j = a; j < b; j++) {
            for (int k = c; k < d; k++) {
                s[j][k]++;
            }
        }
    }
    int ans = 0;
    for (int i = 0; i <= 100; i++) {
        for (int j = 0; j <= 100; j++) {
            if (s[i][j] > 0) ans++;
        }
    }
    cout << ans << endl;
    return 0;
}

C题:Blue Spring

标签:贪心、模拟
题意: N N N天火车旅行计划,每天火车车票为 F i F_i Fi​元,可以购买能使用 D D D天的乘车劵(不一定要连续天),乘车券每张 P P P元。求 N N N天火车旅行的最少花费。
题解:贪心策略: D D D天直接购买火车车票的费用超过 P P P元,就购买乘车劵。我们可以先按车票费用排个序,然后尽量拿费用大的去试试 能不能通过购买乘车劵降低花费。
代码:

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

const int N = 2e5 + 10;
typedef long long ll;
ll n, d, p, f[N];

int main() {
    cin >> n >> d >> p;
    for (int i = 1; i <= n; i++) {
        cin >> f[i];
    }
    sort(f + 1, f + 1 + n);
    
    ll ans = 0, c = 0, sum = 0;
    for (int i = n; i >= 1; i--) {
        sum += f[i];
        c++;
        if (c == d) {
            ans += min(p, sum);
            c = 0;
            sum = 0;
        }
    }
    if (c > 0) ans += min(p, sum);
    cout << ans << endl;
    return 0;
}

D题:General Weighted Max Matching

标签:深度优先搜索
题意:给定一个 N N N个顶点的加权无向完全图,给定任意两个顶点之间的边权,求满足 “所选边的端点是成对不同” 条件的最大可能总权值。
题解:暴力深搜下去就好了,一个个点遍历下去,如果当前点没有被选,那就选上试试,然后遍历他能走到的其他顶点(没有被标记过的),然后对应打上标记,记得回溯处理一下。过程中更新一下最大的总权值。
代码:

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

typedef long long ll;
ll d[20][20], ans = 0, n;
bool vis[20];

void dfs(ll p, ll sum) {
    ans = max(ans, sum);
    if (p == n + 1) {
        return ;
    }
    dfs(p + 1, sum);
    if (!vis[p]) {
        for (int j = p + 1; j <= n; j++) {
            if (!vis[j]) {
                vis[p] = 1; vis[j] = 1;
                dfs(p + 1, sum + d[p][j]);
                vis[p] = 0; vis[j] = 0;
            }
        }
    }
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = i + 1; j <= n; j++) {
            cin >> d[i][j];
        }
    }
    dfs(1, 0);
    cout << ans;
    return 0;
}

E题:Sandwiches

标签:数学、思维
题意:给你一个长度为 N N N 的正整数序列: A = ( A 1 , A 2 , … , A N ) A=(A_1,A_2,…,A_N) A=(A1​,A2​,…,AN​),求满足下列所有条件的正整数三元组 ( i , j , k ) (i,j,k) (i,j,k) 的个数:

  • $ 1≤i<j<k≤N$
  • $ A_i=A_k$
  • $ A_i \neq A_j$

题解:这道题本质其实就是:求相等的数之间夹的不同的数的个数。举几个例子,我们来找找规律:
设 k k k为非 11 11 11的数
11 11 11 a a a个 k k k 11 11 11 => 符合要求的有 a a a个
11 11 11 a a a个 k k k 11 11 11 b b b个 k k k 11 11 11 => 符合要求的有 2 a + 2 b 2a+2b 2a+2b个
11 11 11 a a a个 k k k 11 11 11 b b b个 k k k 11 11 11 c c c个 k k k 11 11 11 => 符合要求的有 3 a + 4 b + 3 c 3a+4b+3c 3a+4b+3c个
依次类推如果夹了 a 、 b 、 c 、 d a、b、c、d a、b、c、d,=> 4 a + 6 b + 6 c + 4 d 4a+6b+6c+4d 4a+6b+6c+4d个
在图上可以画一画,每个 11 11 11会和对应的其他 11 11 11,组成的区间,然后去统计一下每块相邻区间的计算次数,能得到式子: k ∗ ( l e n − k ) k*(len-k) k∗(len−k)。
实际的算法流程就先把对应数值的下标塞到一个不定长数组里面,然后求一下相邻的相同的数,每一块区间能够产生的贡献,累加一下就可以了。
代码:

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

const int N = 3e5 + 10;
typedef long long ll;
vector<ll> a[N];

int main() {
    ll n, x, ans = 0;
    cin >> n;
    for (ll i = 1; i <= n; i++) {
        cin >> x;
        a[x].push_back(i);
    }
    for (ll i = 1; i <= n; i++) {
        ll len = a[i].size();
        for (ll k = 1; k < len; k++) {
            ans += k * (len - k) * (a[i][k] - a[i][k-1] - 1);
        }
    }
    cout << ans << endl;
    return 0;
}
AtCoder Beginner Contest 350 (ABCDEF题)视频讲解 AtCoder Beginner Contest 350 A到F题视频讲解 阅读详情

相关推荐

AtCoder初学者竞赛: 编程学习

AtCoder初学者竞赛是一个面向编程初学者的竞赛平台,提供了一系列算法和数据结构问题。该竞赛旨在帮助参赛者提高他们的编程技能,并为他们提供一个实践的机会。竞赛通常在规定的时间内进行,参赛者需要解决给定的问题,并提交他们的解答。AtCoder初学者竞赛(AtCoder Beginner Contest)是一个受欢迎的在线编程竞赛平台,旨在帮助初学者提高编程技能。本文将介绍关于AtCoder初学者竞赛的基本知识,并提供一些示例代码,帮助读者更好地理解和应用这些概念。示例代码1:计算两个整数的和。

database_bug768的博客 2464

AtCoder算法竞技平台简介

AtCoder是日本最大的算法竞技网站,域名为http://atcoder.jp/(注意http://www.atcoder.jp/ 是其官网)。AtCoder支持日语和英语。 AtCoder每周六北京时间20:00(日本标准时间则为21:00)会有比赛。AtCoder的比赛分为三个等级: (1)AtCoder Beginner Contest (ABC),是给算法初学者参加的。总共有4道...

小树学信奥 2万+

AtCoder初学者比赛编程学习

AtCoder初学者比赛是专门为初学者设计的比赛,题目相对简单,适合新手入门。比赛通常在每个月的第一个和第三个周六举行,你可以在AtCoder网站上的比赛日历中查看确切的日期和时间。在编程学习的旅程中,参加编程竞赛是提高技能和测试自己能力的一种有效方式。在参加比赛时,保持冷静和专注,不断尝试和学习他人的解决方案,并通过实践来提高自己的编程水平。比赛开始后,你将面临一系列编程问题。),点击右上角的"Register"按钮,按照指示填写必要的信息并完成注册过程。接下来,我们计算两个整数的和,并将结果打印输出。

WqSmalltalk的博客 1744

AtCoder Beginner Contest 318 题解 A-E

AtCoder Beginner Contest 318 题解 A-E,模拟,dfs,组合数学,技巧题

xiaoqian7758258的博客 526

深入理解AtCoder:C++竞赛编程与实践

本文还有配套的精品资源,点击获取 简介:AtCoder是程序员喜爱的在线编程竞赛平台,尤其在C++社区中有很高的认可度。了解AtCoder的同时,掌握C++基础、编程技巧、竞赛相关知识、调试测试方法和版本控制技能是提升竞赛表现的关键。本介绍提供了关于如何使用C++参与AtCoder竞赛的全面概述,包括模板、STL、算法优化、异常处理和版本控制等关键点。 1. C+...

weixin_42143092的博客 2191

51单片机独立按键控制LED(二)

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。独立按键控制LED显示二进制。独立按键控制LED灯亮灭。独立按键控制LED状态。独立按键控制LED移位。

m0_50562428的博客 5381

AtCoder Beginner Contest 318

AtCoder Beginner Contest 318

青少年趣味编程 808

AI智能体项目管理框架agent-pm:从原理到实战的多智能体协作指南

在人工智能和自动化技术快速发展的今天,多智能体系统已成为实现复杂任务自动化的重要技术路径。其核心原理在于通过任务分解、角色分配和状态管理,让多个AI智能体像人类团队一样协同工作,从而突破单个模型的性能边界。这种架构的技术价值在于将软件工程中成熟的项目管理方法论引入AI领域,显著提升了自动化流程的可预测性、可观测性和可复用性。在实际应用场景中,多智能体协作框架能够高效处理从代码开发、文档撰写到数据分析等一系列任务,尤其适合需要多步骤、多专业协同的复杂项目。本文聚焦的agent-pm框架,正是这一领域的典型实践

weixin_42533910的博客 714

AtCoder Beginner Contest 162

AtCoder Beginner Contest 162

青少年趣味编程 1474

6.5 构网型储能系统的协同控制策略

本文系统阐述了构网型储能系统的协同控制策略,重点分析了多机组群协同运行面临的功率分配不均、动态响应失配等挑战。研究提出了改进型下垂控制与虚拟阻抗法、基于一致性算法的分布式协同控制等解决方案,探讨了构网型储能与同步发电机在惯性响应、一次调频等方面的协同机制,以及与跟网型电源在电压支撑、阻抗重塑等方面的互补作用。文章构建了分层控制架构,为实现多类型电源的全局优化运行提供了技术路径,对提升高比例新能源电力系统的稳定性具有重要意义。

技术工作者 1000

STM32CubeMX HAL实战:JY901S串口数据解析与姿态解算

本文详细介绍了如何使用STM32CubeMX HAL库实现JY901S六轴姿态传感器的串口数据解析与姿态解算。从基础硬件连接到USART3配置,再到数据接收状态机实现和传感器校准方法,最后深入讲解互补滤波与Mahony滤波算法在姿态解算中的应用。通过实战代码演示,帮助开发者快速掌握无人机、机器人等项目中关键姿态数据处理技术。

weixin_28703489的博客 432

AtCoder Beginner Contest 318 E题 Sandwiches

AtCoder Beginner Contest 318 E题 Sandwiches

超哥聊信奥 1251

有限元缺陷:剪切锁死

有限元缺陷:剪切锁死

wsxww11的博客 5185

AtCoder Beginner Contest 306-335

AtCoder Beginner Contest 306-335

青少年趣味编程 1086

【LDPC-7】LLR量化位宽对LDPC译码性能的影响分析——以最小和译码算法为例进行matlab仿真

最小和译码算法的步骤如下:最后译码结果如果满足或者完成所有迭代次数,则译码算法停止迭代,否则继续进行译码迭代操作。

FPGA/MATLAB学习教程/源码/项目合作开发 1471

XRoboToolkit —— 基于 PICO 4 Ultra 的机器人遥操作方案(一)

视觉-语言-动作模型(Vision-Language-Action models)的快速发展催生了对大规模、高质量机器人演示数据集的迫切需求。尽管遥操作是数据采集的主要方法,但现有方法存在可扩展性有限、设置流程复杂以及数据质量不佳等问题。本文提出XRoboToolkit,这是一个基于OpenXR标准的跨平台扩展现实(XR)机器人遥操作框架。该系统具备低延迟立体视觉反馈、基于优化的逆运动学算法,并支持多种跟踪模态,包括头部、控制器、手部及辅助运动追踪器。

2506_90492529的博客 3300

AtCoder Beginner Contest 311--330

AtCoder Beginner Contest 311--330

青少年趣味编程 973

AI自瞄原理剖析(一)屏幕内容循环截取及代码实现

尽管Yolo框架在推理时其实是可以输入不同大小的图片的,但这些作者大多不会去处理图像尺寸的改变,所以目前大部分开源源码主要是以输入320或者640尺寸的图像为主。只要截图的效率足够快,能够满足一秒采集60张图片,也就是稳定的截图速度达到60帧以上,那么就可以实现内存级别的AI锁死自瞄效果。这里强调了截图速度对于最终实现特定自瞄效果的重要性,只有达到这样的速度标准,才能让整个自瞄相关的功能在内存层面有效地运作起来。在实现自瞄功能的情境下,只需要以游戏准星为中心向外的正方形区域图像就够了,没必要进行全屏截取。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1095

AtCoder Beginner Contest 317-332

AtCoder Beginner Contest 317-332

青少年趣味编程 884

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

计算机控制技术及应用

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

AtCoder Beginner Contest 318 G - Typical Path Problem 题解

ABC318 G - Typical Path Problem 题解 本题可以使用最大流或圆方树解决。

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

AtCoder Beginner Contest 365

D。

m0_61949623的博客 1110

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

AtCoder Beginner Contest 301-350

本文汇总了AtCoder Beginner Contest 301至350的竞赛题解链接,以及Codeforces 881-1076轮次的相关内容。同时整理了信息学竞赛(NOI/CSP)的备考资源,包括数学学习资料、省选题单、集训建议等,涵盖编程竞赛从入门到提高的全方位学习路径,适合算法竞赛选手参考使用。

青少年趣味编程 32

AtCoder Beginner Contest 318 C题 Blue Spring

AtCoder Beginner Contest 318 C题 Blue Spring

超哥聊信奥 457

THIRD PROGRAMMING CONTEST 2023 ALGO(AtCoder Beginner Contest 318)

转移时通过加减那两个数的贡献,就得到 j移动到下一个数时的 ∑的值。考虑枚举下标j,剩下的就是考虑 j左边和 j右边的相同数。这个j对答案的贡献就是 ∑x≠ajlx×rx,其中 lx表示 j左边 x(是值,不是下标)的个数, rx就是右边的 x的个数。如果枚举下标i会发现比较难计算,对于当前的 ai,那么对于之后的每个 ak都要考虑它们之间的其他数的个数,感觉复杂度会比较大。所以就直接爆搜的就好了,也就是对于每一个点找它匹配的点,需要注意的是可以有点不匹配边。这样的复杂度就是 O(N!

qq_64289808的博客 671
上一篇: 上海计算机学会11月月赛 丙组题解
下一篇: AtCoder Beginner Contest 308 A-F题解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值