AtCoder Beginner Contest 423 DEF题解

news/2025/9/24 23:37:22/文章来源:https://www.cnblogs.com/mrjiege/p/19110312

D - Long Waiting

题意:

餐厅最多同时容纳K人
单队列管理,先进先出
N组顾客按顺序到达,每组有:到达时间Aᵢ、人数Cᵢ、用餐时间Bᵢ
进入条件:
在队首位置
餐厅现有人数 + 该组人数 ≤ K
需要计算每组实际进入餐厅的时间

思路:

考虑使用优先队列(最小堆)按离开时间排序
对于每一组,分类讨论,若当前空间可以容纳该组,直接入队,该组答案为上一组入队时间和该组可进入时间的最大值。
否则,不断弹出队头元素,直到当前组可以进入,该组答案为max(该组到达时间, 最后弹出组的离开时间)

代码

#include<bits/stdc++.h>
#define ll long long
#define ce cerr
#define ull unsigned long long
#define lll __int128
using namespace std;
#define int long long
const int inf = 0x3f3f3f3f;
const ll iinf = 1e18;
const int N = 3e5 + 10;
//cin.ignore(std::numeric_limits< streamsize >::max(), '\n');
int t;struct node {int x, y, z, w;
};
struct cmp {bool operator () (const node & a, const node & b) const {return a.y > b.y;}
};
void solve() {int n, k;cin >> n >> k;vector<node> vec (n + 1);vector<int> res (n + 1);priority_queue<node, vector<node>, cmp> que;for (int i = 1; i <= n; ++i) {int x, y, z;cin >> x >> y >> z;vec[i] = {x, x + y, z, y};}int now = 0;for (int i = 1; i <= n; ++i) {if (now + vec[i].z <= k) {now += vec[i].z;res[i] = max (res[i - 1], vec[i].x);que.push ({res[i], res[i] + vec[i].w, vec[i].z, vec[i].w});}else{node it;while (!que.empty () && now + vec[i].z > k) {it = que.top ();que.pop ();now -= it.z;}res[i] = max (vec[i].x, it.w + it.x);que.push ({res[i], res[i] + vec[i].w, vec[i].z, vec[i].w});now += vec[i].z;}}for (int i = 1; i <= n; ++i) {cout << res[i] << "\n";}
}
signed main() {ios::sync_with_stdio (false);cin.tie(NULL);cout.tie(NULL);t = 1;//cin >> t;while (t --) {solve();}return 0;
}

E - Sum of Subarrays

题意:

给定一个长度为 \(N\) 的整数序列 \(A = (A_1, A_2, \ldots, A_N)\),以及 \(Q\) 个查询。每个查询给出两个整数 \(L_i\)\(R_i\),要求计算:

\[\sum_{l=L_i}^{R_i} \sum_{r=l}^{R_i} \sum_{j=l}^{r} A_j \]

即,对于查询区间 \([L_i, R_i]\),计算所有连续子数组 \([l, r]\)(满足 \(L_i \le l \le r \le R_i\))的和之和。

\(A = [1, 2, 3]\),查询 \(L = 1, R = 3\),则需计算以下子数组的和并相加:

  • \([1,1]\)\([1,2]\)\([1,3]\)
  • \([2,2]\)\([2,3]\)
  • \([3,3]\)

思路:

1. 数学变换

原问题中的三重求和可以转化为对每个元素 \(A_j\) 的贡献计算。对于每个 \(j\)(在区间 \([L, R]\) 内),它被包含在那些满足 \(l \leq j \leq r\)\(L \leq l \leq r \leq R\) 的子数组 \([l, r]\) 中。

这样的子数组个数为:

\[(j - L + 1) \times (R - j + 1) \]

因此,原式等价于:

\[\sum_{j=L}^{R} A_j \times (j - L + 1) \times (R - j + 1) \]

2. 展开乘积

\((j - L + 1) \times (R - j + 1)\) 展开:

\[\begin{aligned} (j - L + 1) \times (R - j + 1) &= -j^2 + j(L + R) + (R + 1 - LR - L) \end{aligned} \]

对于这个式子,用前缀和优化即可

代码

#include<bits/stdc++.h>
#define ll long long
#define ce cerr
#define ull unsigned long long
#define lll __int128
using namespace std;
#define int long long
const int inf = 0x3f3f3f3f;
const ll iinf = 1e18;//cin.ignore(std::numeric_limits< streamsize >::max(), '\n');
int t;void solve() {int n, q;cin >> n >> q;vector<ll> a (n + 1);vector<ll> iai (n + 1);vector<ll> iiai (n + 1);vector<ll> ai (n + 1);for (int i = 1; i <= n; ++i) {cin >> a[i];ll temp = i * a[i];iai[i] = temp + iai[i - 1];temp = temp * i;iiai[i] = iiai[i - 1] + temp;ai[i] = ai[i - 1] + a[i];}while (q --) {int l, r;cin >> l >> r;ll len = r - l + 1;ll one = (iai[r] - iai[l - 1]) * (len + 2 * l - 1);ll two = iiai[r] - iiai[l - 1];ll three = (l - l * l + len - l * len) * (ai[r] - ai[l - 1]);cout << one - two + three << "\n";}
}
signed main() {ios::sync_with_stdio (false);cin.tie(NULL);cout.tie(NULL);t = 1;//cin >> t;while (t --) {solve();}return 0;
}

F - Loud Cicada

题意:

给定 n 个正整数 a[1..n],求在 1 到 y 之间,有多少个数 x,使得 x 能被 a[1..n] 中至少 m 个数整除。

思路:

考虑容斥原理:

枚举所有非空子集:遍历所有可能的子集(从 1 到 (1<<n)-1),表示从 n 个数中选取的子集。
计算子集的贡献:
对于每个子集,计算子集中元素的个数 cnt 和最小公倍数 Lcm。
如果 Lcm > y,则该子集没有贡献(因为 y/Lcm = 0)。
如果 cnt < m,则跳过(因为我们需要至少 m 个元素)。
如果 cnt >= m,则计算该子集的贡献:y / Lcm * C[cnt][m]。
容斥原理应用:
如果 (cnt - m) 是奇数,则减去该贡献:res -= y / Lcm * C[cnt][m]
如果 (cnt - m) 是偶数,则加上该贡献:res += y / Lcm * C[cnt][m]

代码

#include<bits/stdc++.h>
#define ll long long
#define ce cerr
#define ull unsigned long long
#define lll __int128
#define PII pair<int, int>
#define PLL pair<long ,long>using namespace std;const int inf = 0x3f3f3f3f;
const ll iinf = 1e18;//cin.ignore(std::numeric_limits< streamsize >::max(), '\n');
int t;
static int C[21][21];void init () {for (int i = 0; i <= 20; ++i) {C[i][0] = C[i][i] = 1;for (int j = 1; j < i; ++j) {C[i][j] = C[i - 1][j - 1] + C[i - 1][j];}}
}lll gcd (lll a, lll b) {return b ? gcd (b, a % b) : a;
}
lll lcm (lll a, lll b) {return a * b / gcd (a, b);
}
void solve() {init ();ll n, m, y;cin >> n >> m >> y;vector<ll> a (n + 1);for (int i = 1; i <= n; ++i) {cin >> a[i];}ll res = 0;for (int k = 1; k < (1 << n); ++k) {int temp = k;int cnt = 0;ll Gcd = 0;lll mul = 1;lll Lcm = 1;bool flag = false;for (int i = 0; i < n; ++i) { if ((temp >> i) & 1) {Lcm = lcm (Lcm, a[i + 1]);if (Lcm > y) {flag = 1;break;}mul = mul * a[i + 1];cnt ++;}}if (flag) continue;if (cnt < m) {continue;}else{if ((cnt - m) & 1) {res += -1 * y / Lcm * C[cnt][m];}else{res += y / Lcm * C[cnt][m];}}}cout << res << "\n";
}
int main() {ios::sync_with_stdio (false);cin.tie(NULL);cout.tie(NULL);t = 1;//cin >> t;while (t --) {solve();}return 0;
}

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

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

相关文章

高级的 SQL 查询技巧

1.常见表表达式(CTEs) with toronto_ppl as ( SELECT DISTINCT name FROM population WHERE country = "Canada" AND city = "Toronto") , avg_female_salary as ( SEL…

网站pc开发上海商旅平台app

婚恋相亲红娘牵线系统是一个综合性的婚恋交友平台&#xff0c;它集成了多种功能以帮助用户找到心仪的伴侣。以下是其主要功能的详细介绍&#xff1a; 用户信息深度分析和匹配&#xff1a;该系统利用大数据和人工智能技术&#xff0c;对用户的基本信息&#xff08;如年龄、身高…

在台风天找回了生活的本貌

早上7点30分,风拍打窗户的声音很大,加上我的生物钟也在7点30分,我醒了。我望向窗外,天地灰蒙,树木狂舞,这才想起今天广东刮台风,各地都停工停课了。我看到家人和对面的邻居都安静地待在家中,平日里匆忙的脚步被…

网站建设事宜wordpress可以企业网站

随着市场竞争的日益激烈&#xff0c;企业对产品开发的要求也越来越高。如何在快速变化的市场环境中&#xff0c;既保证产品的批量生产效率&#xff0c;又满足客户的个性化需求&#xff0c;成为了企业面临的重要挑战。IPD&#xff08;集成产品开发&#xff09;模式&#xff0c;作…

政务网站信息化建设情况网站的建设ppt

然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</

礼泉做网站表格我做视频网站

本章我们将编写坚持一百秒游戏&#xff0c;玩家通过鼠标控制火箭躲避一架UFO和越来越多的反弹子弹&#xff0c;效果如图所示。首先学习图片的导入和显示&#xff0c;并利用结构体实现一颗反弹的子弹&#xff1b;然后学习面向对象编程的知识&#xff0c;利用类和对象实现新版本的…

成都j网站制作如何做企业网络营销推广

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

经典战役回顾 现在离比赛结束还有 \(45\) 分钟。这个时候你列表中只有你没过 C,你没有任何思路,你发现 E1 是个题面不长看起来很小清新的交互构造题,你选择冲击。 在还有 \(20\) 分钟的时候你把握住了整体思路,准备…

湘潭市高新建设局施工报建网站农畜产品销售平台的网站建设

instanceof检查子父类&#xff08;或者是否能被强转&#xff09; 作用1&#xff1a;检查某对象是否是某类的子类 如&#xff1a;儿子类继承了父亲类。 检查儿子类对象是否属于父亲类 作用2&#xff1a;检查两个对象是否可以强转 语法&#xff1a; 子类对象 instanceof 父…

外国高端网站怎样登录建设互联网站

Axios 和 Ajax 都是用于发起 HTTP 请求的工具&#xff0c;但它们之间有一些重要的区别&#xff1a; Ajax&#xff1a; Ajax 是一种使用 JavaScript 发起异步 HTTP 请求的技术&#xff0c;通常通过 XMLHttpRequest 对象来实现。在使用 Ajax 时&#xff0c;需要手动处理请求和响应…

Error response from daemon: could not select device driver nvidia with capabilities: [[gpu]]

环境:WSL2下的Ubuntu24.04系统 场景:拉取ragflow的gpu版本镜像docker compose -f docker-compose-gpu.yml up -d时发生 其它信息:能在WSL2中使用nvidia-smi显示驱动版本信息 确认问题所在:执行dpkg -l | grep nvid…

中国建设工程造价管理协会登录网站壹壹推广联盟

前提是安装好redux相关关于在ts中使用最新版redux的方法记录_奋斗在前端的实习小白的博客-CSDN博客 1.下载 npm install redux-persist git地址&#xff1a;GitHub - rt2zz/redux-persist: persist and rehydrate a redux store 在项目根目录中配置好PersistGate标签 //re…

全内存12306抢票系统设计:基于位运算的高效席位状态管理

在高并发的列车售票场景中,传统基于数据库的方案往往面临性能瓶颈。每到春运、国庆等出行高峰,数万用户同时抢票,数据库查询和更新操作导致系统响应变慢甚至崩溃。本文将介绍一种创新的全内存售票系统设计方案,通过…

第三天

今天学习了离散数学的集合,受益匪浅。马克思主义原理更是让我流连忘返。

adobe illustrator中如何打出度数的上标

001、打开一个文字输入框,随机输入文字,比如此处输入100 002、将鼠标的光标点至文字输入状态 003、点1-3 004、 这里输入法调整成这样 005、 找到这个圈,双击 006、效果 。

Strong duality

I like this, this is goodPrimal Problem and Dual Problem Consider the standard form linear programming problem \[\begin{aligned} \text{minimize }~~~&\mathbf c\mathbf x\\ \text{subject to}~~~&\…

day003

今日完成:计算机求和程序登录系统(可视化界面) 明日完成:斗地主 遇到问题:主程序的动态数组无法在其他类中直接调用,可以传输过去

newDay03

1.做了几个数组的小练习,比如说打乱数组之中的每一个数据,在数组之间生成随机数并求和,简单了解了一下方法的定义和调用,依旧是继续背单词,完成部分作业 2.明天继续往下学 3.办事还是显得很粗糙,再多注重一些细节…

网站开发公司创业山西两学一做登录网站

7-8 德才论 (25 分) 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”&#xff1a;“是故才德全尽谓之圣人&#xff0c;才德兼亡谓之愚人&#xff0c;德胜才谓之君子&#xff0c;才胜德谓之小人。凡取人之术&#xff0c;苟不得圣人&#xff0c;君子而与之&#xff0c;…