IAEPC Preliminary Contest (Codeforces Round 999, Div. 1 + Div. 2)

news/2025/1/21 18:05:16/文章来源:https://www.cnblogs.com/maburb/p/18684022

A. Kevin and Arithmetic

题意:给你\(n\)个数,你一开始有一个\(x = 0\),每次你让\(x\)加上一个没用过的数,然后\(x\)会一直除二直到变成奇数。如果你加上一个数后能除2,分数加1,问分数最大多少。

奇数后面加奇数才能是偶数,但一开始\(x\)是零,那么需要一个偶数,否则只能浪费一个奇数。
所以如果有偶数就是奇数个数加1,否则是奇数个数减1.

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> a(n);int cnt[2]{};for (int i = 0; i < n; ++ i) {std::cin >> a[i];++ cnt[a[i] & 1];}if (cnt[0]) {std::cout << 1 + cnt[1] << "\n";} else {std::cout << std::max(0, cnt[1] - 1) << "\n";}
}

B. Kevin and Geometry

题意:\(n\)个数,你要选四个数组成等腰梯形。

对梯形作高发现两边是两个三角形,那么(上底-下底)/2是底边长,为了让梯形的两个腰边能够上上底,这个距离一定小于腰边。所以我们找两个相同的数作为腰边,然后找差值最小的两个数当上底和下底。

点击查看代码
void solve() {int n;std::cin >> n;std::vector<i64> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}std::sort(a.begin(), a.end());int p = -1;for (int i = 0; i + 1 < n; ++ i) {if (a[i] == a[i + 1]) {p = i;break;}}if (p == -1) {std::cout << -1 << "\n";return;}for (int i = 0, j = 0; i + 1 < n; ++ i) {while (i == p || i == p + 1) {++ i;}j = std::max(j, i);while (j == i || j == p || j == p + 1) {++ j;}if (i < n && j < n && std::abs(a[i] - a[j]) < a[p] + a[p]) {std::cout << a[j] << " " << a[i] << " " << a[p] << " " << a[p] << "\n";return;}}std::cout << -1 << "\n";
}

C. Kevin and Puzzle

题意:\(n\)个人,每个人可能是老实人也可能是说谎者,老实人一定说真话。两个说谎者不能站一起。第\(i\)个说左边有\(a_i\)个骗子。问这些人可能的组合有多少。

\(f_{i_{0/1}}\)表示第\(i\)个是老实人/说谎者。那么如果\(i\)是老实人,看前面一个人怎么转移过来。如果前面那个人也是老实人,那么\(a_i = a_{i+1}\),因为\(i\)说真话,\(i-1\)也是老实人,那么\(i-1\)左边的老实人应该等于\(a_i\)说的,不然两个人不可能同时是老实人。如果\(i-1\)是说谎者,那么因为两个说谎者不能站一起,第\(i-2\)个人一定是老实人,因为\(i-1\)是说谎者,那么到\(i-2\)这里还有\(a_i - 1\)个说谎者,看能不能对上就行。
如果\(i\)说谎,那么\(i-1\)一定使老实人,\(f_{i_0} = f_{i-1_1}\)

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> a(n + 1);for (int i = 1; i <= n; ++ i) {std::cin >> a[i];}if (n == 1) {std::cout << (1 + (a[1] == 0)) << "\n";return;}std::vector f(n + 1, std::array<Z, 2>{});f[1][0] = a[1] == 0;f[1][1] = 1;for (int i = 2; i <= n; ++ i) {if (a[i] == a[i - 1]) {f[i][0] += f[i - 1][0];}if (i >= 2 && a[i] - 1 == a[i - 2]) {f[i][0] += f[i - 1][1];}f[i][1] = f[i - 1][0];}std::cout << f[n][0] + f[n][1] << "\n";}

D. Kevin and Numbers

题意:两个数字\(A\)\(B\),每次可以从\(A\)里选两个数,满足他们的差绝对值小于等于1,然后把这两个数删掉,然后把他们的和加入\(A\),问\(A\)能不能变成\(B\)

考虑反着来,从\(B\)\(A\),那么发现如果\(B\)的最大值大于\(A\)的最大值,那么这个最大值必须拆开,发现拆开的方式是唯一的。于是模拟就行。
注意最多操作\(n-m\)次,一直操作可能超时。

点击查看代码
void solve() {int n, m;std::cin >> n >> m;std::priority_queue<int> a, b;for (int i = 0; i < n; ++ i) {int x;std::cin >> x;a.push(x);}for (int i = 0; i < m; ++ i) {int x;std::cin >> x;b.push(x);}i64 sum = n - m;while (sum >= 0 && a.size() && b.size()) {if (a.top() == b.top()) {a.pop();b.pop();} else if (sum > 0) {int u = b.top(); b.pop();b.push(u / 2);b.push(u - u / 2);-- sum;} else {break;}}if (a.empty() && b.empty()) {std::cout << "YES\n";} else {std::cout << "NO\n";}
}

E. Kevin and And

题意:\(n\)个数,你有\(m\)个数让他们操作,每次可以选一个\(i\)\(j\),然后\(a_i \&= b_j\),求最多\(k\)次操作让数组和最小。

发现\(m\)很小,枚举所有操作可以与的数。 然后计算\(f_{ij}\)表示第\(a_i\)操作\(j\)次最多减小多少,然后差分一下,记\(d_{i,j}\)\(a_i\)操作\(j\)次比操作\(j-1\)次可以多减少的值。就可以用优先级队列记录一次操作可以减少的最大值。

点击查看代码
void solve() {int n, m, k;std::cin >> n >> m >> k;std::vector<i64> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}std::vector<i64> b(m);for (int i = 0; i < m; ++ i) {std::cin >> b[i];}std::vector<std::vector<i64> > op(m + 1);for (int i = 0; i < 1 << m; ++ i) {i64 x = (1ll << 30) - 1;int cnt = 0;for (int j = 0; j < m; ++ j) {if (i >> j & 1) {x &= b[j];++ cnt;}}op[cnt].push_back(x);}std::vector d(n, std::vector<i64>(m + 1));for (int i = 0; i < n; ++ i) {for (int j = 1; j <= m; ++ j) {for (auto & x : op[j]) {d[i][j] = std::max(d[i][j], a[i] - (a[i] & x));}d[i][j] = std::max(d[i][j], d[i][j - 1]);}for (int j = m; j >= 1; -- j) {d[i][j] = d[i][j] - d[i][j - 1];}}std::priority_queue<std::array<i64, 3> > heap;for (int i = 0; i < n; ++ i) {heap.push({d[i][1], 1, i});}i64 ans = std::accumulate(a.begin(), a.end(), 0ll);while (k -- ) {auto [x, cnt, id] = heap.top(); heap.pop();ans -= x;if (cnt + 1 <= m) {heap.push({d[id][cnt + 1], cnt + 1, id});}}std::cout << ans << "\n";
}

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

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

相关文章

北汇信息致客户的一封感谢信

北汇信息致客户的一封感谢信尊敬的客户:感谢您选择北汇信息!2024年是不平凡的一年,中国汽车产量再创新高,出海与内卷挑战不断。北汇信息作为汽车电子测试领域的服务商,秉承“价值创造、共享成功”的理念,一直致力于为国内外汽车客户提供优质的产品和服务,共同面对这些挑…

001 修改博客园侧边栏的顺序

打开配置页:https://i.cnblogs.com/settings在“博客侧边栏公告”添加代码<script> $(document).ready(function(){//returnvar list=[sidebar_recentcomments,//最新评论sidebar_categories,//随笔分类、随笔档案sidebar_toptags,//我的标签sidebar_shortcut,//常用链接…

销售进阶:三步提问法,掌握客户心理

在销售行业,时间就是金钱,我们必须争分夺秒地搞定客户。但也不能盲目行动,而要稳扎稳打。关键在于快速抓住客户需求,而客户往往不会主动透露他们的需求,甚至自己都不清楚自己想要什么。这就需要我们通过巧妙的提问来破局,否则忙活半天也只是白费力气。 最让人头疼的是,跟…

寒假集训笔记 | | 第一课

C++STL --第一课 C标准库常用函数<cstring>memset() 暴力清空 char str[10]; memset(str,0,sizeof(str));<cmath>三角函数、指数函数、浮点取整函数<cstdlib>qsort() C语言快排 rand() 随机数 malloc() free() C语言动态内存分配<cctype>isdigit()…

Svelte 最新中文文档翻译(1)—— 概述与入门指南

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

平面二连杆机构的动力学方程

动力学研究物体的运动和作用力之间的关系。机器人动力学问题有两类:一是已知机器人各关节的驱动力或力矩,求解机器人各关节的位置、速度和加速度,这是动力学正问题;二是已知各关节的位置、速度和加速度,求各关节所需的驱动力或力矩,这是动力学逆问题。机器人的动力学正问…

【红队】C2框架:Covenant

一、项目介绍 Covenant是一个.NET开发的C2(command and control)框架,旨在突出.NET的攻击面,并充当红队成员的协作命令和控制平台,该工具不仅支持Linux,MacOS和Windows,还支持docker容器,最特别的地方是支持动态编译,能够将输入的C#代码上传至C2 Server,获得编译后的文…

3. 使用sql查询csv/json文件内容,还能关联查询?

1. 简介 我们在前面的文章提到了calcite可以支持文件系统的数据源适配, 其实官方已经提供了相应的能力, 其支持csv和json的查询适配, 废话不多说, 直接展示. 2. Maven <!-- calcite文件系统支持 --> <dependency><groupId>org.apache.calcite</groupId>…

一文搞懂 APP 算法备案

今天来给大家好好科普一下超重要的 APP 算法备案,这可是和我们日常使用 APP 以及 APP 运营都息息相关的知识点哦! 什么是算法备案 简单来讲,算法备案就相当于 APP 运营者要把自家 APP 里使用的算法详情,向有关部门进行申报登记。这就如同给算法这个 “幕后大脑” 办一张正式…

IDEA 在远程 Tomcat 上运行项目(转载补充版)

转载:IDEA 在远程 Tomcat 上运行项目(亲身避坑版) 我在操作的时候,遇到个问题,提示Unable to open debugger port (192.168.252.232:54578): java. net. ConnectException "Connection refused: connect" 原因是,开启JVM调试,需要在2.1小节设置环境变量的时候…

VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件

VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件 VMware 虚拟机必备组件 (驱动和交互式服务) VMware Tools 13.0.0 发布 - 虚拟机必备组件 (驱动和交互式服务) VMware 客户机操作系统无缝交互必备组件 请…

【交通行业】2024中国网络安全产业势能榜优能企业「交通行业」典型案例展示

交通行业的智能化发展使得交通系统的效率得到了大幅提升,但随之而来的安全隐患也不容忽视。从自动驾驶到智慧交通,每一项技术的进步都伴随着数据保护和系统安全的挑战。我们将通过交通行业的典型案例,探索在高速发展的同时,如何确保交通系统的安全和稳定。 PS:典型案例展示…