【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(3)

比赛链接
本文发布于博客园,会跟随补题进度实时更新,若您在其他平台阅读到此文,请前往博客园获取更好的阅读体验。
跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18786128

开题 + 补题情况

很菜的一把,就开了三个签到题,1001 Lucas 定理花了好久才看出来,明明前两周 CF div3 才遇到过,1010 那么明显的曼哈顿距离拆绝对值想了八百年才想出来,明明寒假集训才学过的,真的感觉自己基础太不牢固了,很多很基本的东西用不好。
image

1005 - 修复公路

非常明显的并查集,答案就是连通块个数 \(-1\)

点击查看代码
#include <bits/stdc++.h>
#define inf32 1e9
#define inf64 2e18
#define ls o << 1
#define rs o << 1 | 1using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned int;const int N = 3e5 + 9;
int a[N], fa[N];int root(int x) {return (fa[x] == x) ? x : fa[x] = root(fa[x]);
}void merge(int u, int v) {fa[root(u)] = root(fa[v]);
}void solve()
{int n;std::cin >> n;for(int i = 1;i <= n;i ++) {std::cin >> a[i];}for(int i = 1;i <= n;i ++) {fa[i] = i;}for(int i = 1;i <= n;i ++) {if(i - a[i] > 0) {merge(i, i - a[i]);}if(i + a[i] <= n) {merge(i, i + a[i]);}}int sum = 0;for(int i = 1;i <= n;i ++) {sum += (root(i) == i);}std::cout << sum - 1 << '\n';
}

1001 - 数列计数

乘积为奇数,那就是每一项都是奇数,运用 Lucas 定理,一个组合数 \(C_n^m\) 为奇数,当且仅当 \(n \& m = m\)
若我们先忽略掉题目给的 \(L_i\) 的限制,则答案为 \(2^{sum_i}\)\(sum_i\)\(a_i\) 中为 \(1\) 的位数,很好理解,也就是对于这些位,\(b_i\) 可以取 \(0\) 也可以取 \(1\),总的组合数。
但是题目有一个 \(L_i\) 的限制,这个如何考虑呢?

  • 如果 \(L_i \geq a_i\),则无需考虑。
  • 如果 \(L_i < a_i\),那么我们从高位到低位考虑。
    • 如果 \(a_i\) 这一位为 \(1\),但是 \(L_i\) 这一位为 \(0\),则我们减掉第 \(i\) 位右边所有 \(a_i\)\(1\) 的位的组合数,相当于就是减掉了这一位取 \(1\) 的情况,因为此时大于了 \(L_i\),不合法;如果 \(a_i\) 这一位。
    • 如果 \(a_i\) 这一位为 \(0\),但是 \(L_i\) 这一位为 \(1\),则我们直接跳出循环,因为后面的答案都是合法的。

对每一个数的答案乘起来就是最终答案了。

点击查看代码(省略了取模类)
const long long M = 998244353;
using Z = ModNum<M>;const int N = 2e5 + 9;void solve()
{int n;std::cin >> n;std::vector<i64> a(n), l(n);for(auto &i : a)std::cin >> i;for(auto &i : l)std::cin >> i;Z ans(1);Z t(2);for(int i = 0;i < a.size();i ++) {int sum = 0;for(int j = 0;j < 32;j ++) {if(a[i] & (1 << j)) {sum ++;}}Z tmp;tmp = t.Pow(sum);if(l[i] < a[i]) {for(int j = 31;j >= 0;j --) {if(a[i] & (1 << j))sum --;int x = (a[i] >> j & 1);int y = (l[i] >> j & 1);if(x == 1 && y == 0) {tmp -= t.Pow(sum);}if(x == 0 && y == 1) {break;}}}ans *= tmp;}std::cout << ans << '\n';
}

1010 - 选择配送

寒假集训的时候才学过的东西,竟然想了这么久,真的不应该。
对曼哈顿距离拆掉绝对值,可以得到 \((x_1, y_1)\)\((x_2, y_2)\) 的曼哈顿距离为:

  • \(\max((x_1 - y_1) - (x_2 - y_2),(x_1 + y_1) - (x_2 + y_2),(x_2 - y_2) - (x_1 - y_1),(x_2 + y_2) - (x_1 + y_1))\)
    \(x_2 - y_2\)\(x2 + y_2\) 各自维护一下最大最小值,然后对每个待选点查询一下即可。
点击查看代码
#include <bits/stdc++.h>
#define inf32 1e9
#define inf64 2e18
#define ls o << 1
#define rs o << 1 | 1using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned int;const int N = 2e5 + 9;struct Node {i64 x, y;
};void solve()
{int n, m;std::cin >> n >> m;std::vector<Node> a(n), b(m);for(auto &[x, y] : a) {std::cin >> x >> y;}for(auto &[x, y] : b) {std::cin >> x >> y;}i64 admx = -inf64, admi = inf64, demx = -inf64, demi = inf64; for(int i = 0;i < n;i ++) {admx = std::max(admx, a[i].x + a[i].y);admi = std::min(admi, a[i].x + a[i].y);demx = std::max(demx, a[i].x - a[i].y);demi = std::min(demi, a[i].x - a[i].y);}i64 ans = inf64;for(auto &[x, y] : b) {i64 tmp = -inf64;tmp = std::max(tmp, x + y - admi);tmp = std::max(tmp, admx - (x + y));tmp = std::max(tmp, x - y - demi);tmp = std::max(tmp, demx - (x - y));ans = std::min(ans, tmp);}std::cout << ans << '\n';
} 

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

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

相关文章

51单片机学习笔记-3

串口通信UART(universal asynchronous receiver transmitter,通用异步收发器):可用来实现串口通信。串口硬件:基础串口包含TXD/RXD两个通信线,他们交叉连接。(如DB9通常使用2(RXD),3(TXD),5(GND)。) 当串口两头电平标准不一样时,需要叫电平转换芯片。TTL电平:5V表示1,…

微信小程序 -2025/3/22

HttpClient 介绍:核心api发送请求步骤小程序目录结构小程序页面组成微信登录 发送请求

应用打包测试

用HBuilder打包了一个之前写着玩的html页面

小白与Android Studio的初遇

新手小白在Android Studio上运行程序的时候遇到俩问题,通过在网上各种找解决方法,最终解决了(然后就想起来继续写博客这件事儿了)。 【第一个问题】关于“Error runningapp:No target device found”。就是它找不到设备(虚拟机或者真机),所以配置虚拟机就行了。 (当我以…

20234220 实验一《Python程序设计》实验报告

20234220 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2342 姓名: 马燕秋 学号:20234220 实验教师:王志强 实验日期:2025年3月18日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练…

Echarts-普通地图和3D地图实现

效果图实现代码 <template><div class="app"><h1>普通地图----------------</h1><div class="map-container" ref="map_ref"></div><h1>3D地图----------------</h1><div class="map-c…

Navicat Premium 16 For Mac 激活,无限试用,非破解,官网安装程序,Mac版Navicat无限试用

Navicat Premium 16 For Mac 激活,无限试用,非破解,官网安装程序,Mac版Navicat无限试用Navicat Premium是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle、MariaDB、Mssql、及 PostgreSQL 资料库,让管理不同类型的资料库更加的方…

Vue3 slot

6.9. 【slot】 1. 默认插槽父组件中:<Category title="今日热门游戏"><ul><li v-for="g in games" :key="g.id">{{ g.name }}</li></ul></Category> 子组件中:<template><div class="item&…

英语四级计划第三天

第三天 单词阅读 Smaller Museums From Niche to Mainstream “小而精”的小众博物馆,正在出圈出彩 Chinas museum boom has continued to rise, leading to increased attention and visibility for smaller but more specialized museums. 中国的博物馆热潮持续升温,导致规…

今日总结(app链接数据库的简单实现以及AI训练学习)

所花时间:145min 代码量(行):120 博客量:14 了解到的知识点: 今天又到了周五了,如同往常一样下午进行自学测试,今天是实现一个app数据库连接 在手机上进行查询显示的任务。 因为对于AS开发我并没有进行系统的学习,只是知道大体的框架和对AI进行训练,但是 我发现了一个…

学嵌入式C语言,看这一篇就够了(6)

C语言的语句和块 C语言标准中一共提供6种语句 注意:C语言中的语句要指明执行的操作,并且没有特殊情况,语句是按照顺序执行的一般把实现某些功能的语句整合在一起,构成一个语法单元,C语言标准的语法单元也被称为块,也被称为块语句 复合语句 复合语句可以限制语句的作用范围…