AtCoder Beginner Contest 392(A-G)题解
A-B:略
C:可能题意比较绕,第i个答案就是穿着i这个号码(也就是Q[j] = i,这个时候j这个位置),看向的那个人的号码(也就是P[j])
代码:
void solve()
{int n;cin >> n;vi p(n + 1), q(n + 1), ans(n + 1);rep(i, 1, n) {cin >> p[i];}rep(i, 1, n) {cin >> q[i];}rep(i, 1, n) {ans[q[i]] = q[p[i]];}rep(i, 1, n) {cout << ans[i] << ' ';}
}
D:枚举哪两个集合[i,j]计算贡献,用map记录每个集合每个元素a个数,最后枚举i和j中间最小那个map计算贡献即可。
void solve()
{int n;cin >> n;vector<map<int, int>> cnt(n + 1);vi k(n + 1);rep(i, 1, n) {cin >> k[i];int x;rep(j, 1, k[i]) {cin >> x;cnt[i][x]++;}}double ans = 0;rep(i, 1, n) {rep(j, i + 1, n) {if (sz(cnt[i]) < sz(cnt[j])) {double dw = 1.0 * k[i] * k[j];double up = 0;for (auto &[x, c] : cnt[i]) {if (cnt[j].count(x)) {up += 1.0 * cnt[j][x] * c;}}ans = max(ans, up / dw);} else {double dw = 1.0 * k[i] * k[j];double up = 0;for (auto &[x, c] : cnt[j]) {if (cnt[i].count(x)) {up += 1.0 * cnt[i][x] * c;}}ans = max(ans, up / dw);}}}cout << fixed << setprecision(10) << ans << '\n';
}
E:考虑用并查集把没用到的边筛除出来,然后每次根据没用到的边再根据所在连通块合并即可,直到最后只剩下一个连通块。
void solve()
{int n, m;cin >> n >> m;DSU dsu(n);vector<pii> edges(m + 1);vi vec;rep(i, 1, m) {int u, v;cin >> u >> v;edges[i] = {u, v};if (dsu.same(u, v)) {vec.pb(i);} else {dsu.merge(u, v);}}if (dsu.getBlocks() == 1) {cout << 0 << '\n';return;}set<int> st;rep(i, 1, n) {if (i == dsu.find(i)) {st.insert(i);}}vector<tuple<int, int, int>> ans;for (auto &i : vec) {auto [u, v] = edges[i];int t = v;u = dsu.find(u);v = dsu.find(v);st.erase(u);int z = *st.begin();st.erase(z);dsu.merge(u, z);ans.pb({i, t, z});st.insert(dsu.find(u));if (sz(st) == 1) {break;}}cout << sz(ans) << '\n';for (auto &[i, x, y]: ans) {cout << i << ' ' << x << ' ' << y << '\n';}
}
F:因为前面的总会被后面的顶掉,所以我们直接倒置放,一定不会被顶掉,每次从头开始找到未被放数字的第a[i]个位置,这个位置就是当前数字,寻找的过程可以通过维护线段树,每次放一个数字就可以把这个位置上的sum标成1,在线段树上二分这个sum去寻找位置,复杂度nlogn。
const int N = 5e5 + 5;
struct node {int l, r;int sum;
} tr[N << 2];void push_up(int u) {tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum;
}void build(int u, int l, int r) {tr[u] = {l, r, 0};if (l == r) {tr[u].sum = 1;return;}int mid = (l + r) >> 1;build(u << 1, l, mid);build(u << 1 | 1, mid + 1, r);push_up(u);
}void modify(int u, int p) {if (tr[u].l == tr[u].r) {tr[u].sum = 0;return;}int mid = (tr[u].l + tr[u].r) >> 1;if (p <= mid) {modify(u << 1, p);} else {modify(u << 1 | 1, p);}push_up(u);
}int find_pos(int u, int sum) {if (tr[u].l == tr[u].r) {return tr[u].l;}if (tr[u << 1].sum >= sum) {return find_pos(u << 1, sum);}return find_pos(u << 1 | 1, sum - tr[u << 1].sum);
}void solve()
{int n;cin >> n;vi a(n + 1);vi ans(n + 1);rep(i, 1, n) {cin >> a[i];}build(1, 1, n);per(i, n, 1) {int p = find_pos(1, a[i]);ans[p] = i;modify(1, p);}rep(i, 1, n) {cout << ans[i] << ' ';}
}
G:经典FFT,考虑把值域a[i]看成多项式的x^a[i],把方案数看成系数,最后把多项式相乘系数就是每个值的方案数,由于原式子可以化成A+C=2B,因此我们枚举2B,只可能是偶数,且B一定要出现在原来的a数组中,这就可以计算到答案中去。
void solve()
{vl A(1e6 + 1), B(1e6 + 1), C(1e6 + 1);int n;cin >> n;rep(i, 1, n) {int x;cin >> x;A[x]++;B[x]++;C[x]++;}auto ret = atcoder::convolution_ll(A, B);ll ans = 0;REP(i, 2, 2000000, 2) {if (C[i >> 1]) {ans += ret[i] / 2;}}cout << ans;
}
相关文章:
AtCoder Beginner Contest 392(A-G)题解
A-B:略 C:可能题意比较绕,第i个答案就是穿着i这个号码(也就是Q[j] i,这个时候j这个位置),看向的那个人的号码(也就是P[j]) 代码: void solve() {int n;cin >> n;vi p(n 1…...
如何在macOS上安装Ollama
安装Ollama 安装Ollama的步骤相对简单,以下是基本的安装指南: 访问官方网站:打开浏览器,访问Ollama的官方网站。 下载安装包:根据你的操作系统,选择相应的安装包进行下载。 运行安装程序:下载完…...
【Redisson分布式锁】基于redisson的分布式锁
redisson分布式锁 maven文件: <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.3</version></dependency>实现代码: 分布式锁对象参…...
【区块链】区块链密码学基础
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 区块链密码学基础引言一、哈希函数1.1 基本概念1.2 数学表达 二、非对称加密2.1…...
NCV4275CDT50RKG 车规级LDO线性电压调节器芯片——专为新能源汽车设计的高可靠性电源解决方案
产品概述: NCV4275CDT50RKG 是一款符合 AEC-Q100 车规认证的高性能LDO(低压差线性稳压器),专为新能源汽车的严苛工作环境设计。该芯片支持 输出调节为 5.0 V 或 3.3 V,最大输出电流达 450mA,具备超低静态电流…...
【Pycharm+Git+Gitlab】安装部署(粗糙版)
1、安装Git 2、安装Pycharm(这里选择的是社区版) 3、桌面右键打开Git Bash 1)设置全局用户名(准备连接的Gitlab仓库的访问用户名) git config ---global user.name "username"2)设置全局邮箱&…...
位运算算法篇:进入位运算的世界
位运算算法篇:进入位运算的世界 本篇文章是我们位运算算法篇的第一章,那么在我们是算法世界中,有那么多重要以及有趣的算法,比如深度优先搜索算法以及BFS以及动态规划算法等等,那么我们位运算在这些算法面前相比&#…...
.net一些知识点5
1.dot Net带out的参数如何使用 string name;//假设这个参数带out TestMethod(1,out name);//一定要有out 方法体中,一定要有out参数的赋值,并且能输出 2.参数的传递方式有哪些 a.值传递 b.引用传递 ref c.输出传递 out 3.设计模式知道哪些 3.us…...
高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案
目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行(下载) 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…...
Cursor无法使用老版本python debug的解决办法
我服务器上的python版本是3.6.8,使用官方的python插件进行debug的时候,弹窗提示说不支持3.7以下的,建议升级python,但是我的工程就是3.6.8的屎山,辗转发现一个土办法: 手动下载老版本的python插件ÿ…...
webpack配置之---output.filename
output.filename 在 Webpack 中,output.filename 配置项用来指定打包后生成的文件名称。它是 Webpack 构建输出目录中的关键部分,决定了生成文件的名字格式。 1. 基本字符串配置 最简单的配置方式是通过字符串设置文件名。比如: module.e…...
如今物联网的快速发展对hmi的更新有哪些积极影响
一、功能更加丰富 物联网的快速发展使得 HMI(人机界面)能够连接更多的设备和系统,从而实现更加丰富的功能。例如,通过与传感器网络的连接,HMI 可以实时显示设备的运行状态、环境参数等信息,为用户提供更加…...
黑马 Linux零基础快速入门到精通 笔记
初识Linux Linux简介 提及操作系统,我们可能最先想到的是windows和mac,这两者都属于个人桌面操作系统领域,而Linux则属于服务器操作系统领域。无论是后端软件、大数据系统、网页服务等等都需要运行在Linux操作系统上。 Linux是一个开源的操作…...
Go 中的 7 个常见接口错误
Go 仍然是一门新语言,如果你正在使用它,它很可能不是你的第一门编程语言。 不同的语言,既为你带来了经验,也带来了偏见。你用以前的任何语言做的事情,在 Go 中用相同的方法可能不是一个好主意。 学习 Go 不仅仅是学习一种新的语法。这也是学习一种新的思维方式来思考你的…...
LLAMA-Factory安装教程(解决报错cannot allocate memory in static TLS block的问题)
步骤一: 下载基础镜像 # 配置docker DNS vi /etc/docker/daemon.json # daemon.json文件中 { "insecure-registries": ["https://swr.cn-east-317.qdrgznjszx.com"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.c…...
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
目录 一、程序填空📝 --- 十进制转其他进制 题目📃 分析🧐 二、程序修改🛠️ --- 非素数求和 题目📃 分析🧐 三、程序设计💻 --- 重复数统计 题目📃 分析🧐 前言…...
Unity3D引擎首次用于光伏仿真设计软件爆火
在光伏设计领域,绿虫光伏仿真设计软件宛如一匹黑马,凭借其基于 Unity3D 引擎的强大功能,为行业带来了全新的解决方案。借助 Unity3D 引擎技术,实现了游戏级高清画面,2D/3D 自由转换,让场景代入感极强&#…...
基础入门-网站协议身份鉴权OAuth2安全Token令牌JWT值Authirization标头
知识点: 1、网站协议-http/https安全差异(抓包) 2、身份鉴权-HTTP头&OAuth2&JWT&Token 一、演示案例-网站协议-http&https-安全测试差异性 1、加密方式 HTTP:使用明文传输,数据在传输过程中可以被…...
深入理解 C++17 std::is_swappable
文章目录 深入理解 C17 std::is_swappable引言std::is_swappable 概述std::is_swappable 的工作原理std::is_swappable 的变体注意事项结论 深入理解 C17 std::is_swappable 引言 在 C 编程中,交换两个对象的值是一个常见的操作。为了确保代码的通用性和安全性&am…...
Oracle常用响应文件介绍(19c)
文章目录 1. 数据库安装响应文件1.1 响应文件模板1.2 参数说明1.2.1 响应文件版本参数1.2.2 安装选项参数1.2.3 Unix 用户组参数1.2.4 软件清单参数1.2.5 安装目录参数1.2.6 安装版本参数1.2.7 特权操作权限组指定参数1.2.8 Root脚本执行配置参数1.2.9 Grid选项配置参数1.2.10 …...
Vue(4)
一.组件的三大组成部分-注意点说明 (1)scoped样式冲突 默认情况:写在组件中的样式会全局生效 → 因此很容易造成多个组件之间的样式冲突 ①全局样式:默认组件中的样式会作用到全局 ②局部样式:可以给组件加上scoped属…...
4G核心网的演变与创新:从传统到虚拟化的跨越
4G核心网 随着移动通信技术的不断发展,4G核心网已经经历了从传统的硬件密集型架构到现代化、虚拟化网络架构的重大转型。这一演变不仅提升了网络的灵活性和可扩展性,也为未来的5G、物联网(LOT)和边缘计算等技术的发展奠定了基础。…...
探讨如何在AS上构建webrtc(2)从sdk/android/Build.gn开始
全文七千多字,示例代码居多别担心,没有废话,不建议跳读。 零、梦开始的地方 要发美梦得先入睡,要入睡得找能躺平的地方。那么能躺平编译webrtc-android的地方在哪?在./src/sdk/android/Build.gn。Build.gn是Build.nin…...
C语言时间相关宏定义
在C语言中,预处理器提供了一些与时间相关的宏定义,用于在编译时获取日期、时间等信息。除了 __TIMESTAMP__ 和 __DATE__,还有以下相关的宏定义: __DATE__ 当前编译日期的字符串,格式为 "Mmm dd yyyy"&#x…...
【Linux基础】Linux下常用的系统命令
一、前言 本文主要总结了工作中常用的linux指令,有遇到新的命令会不定期更新。 二、系统监控和进程管理指令 2.1 ps命令 作用:查看当前进程信息。 常用选项: -e: 显示所有进程,包括其他用户的进程。-f: 显示更详细的进程信息…...
Spring Boot 线程池自定义拒绝策略:解决任务堆积与丢失问题
如何通过自定义线程池提升系统稳定性 背景 在高并发系统中,线程池管理至关重要。默认线程池可能导致: 资源浪费(创建过多线程导致 OOM)任务堆积(队列满后任务被拒绝)任务丢失(默认拒绝策略丢…...
人工智能D* Lite 算法-动态障碍物处理、多步预测和启发式函数优化
在智能驾驶领域,D* Lite 算法是一种高效的动态路径规划算法,适用于处理环境变化时的路径重规划问题。以下将为你展示 D* Lite 算法的高级用法,包含动态障碍物处理、多步预测和启发式函数优化等方面的代码实现。 代码实现 import heapq impo…...
C#常用集合优缺点对比
先上结论: 在C#中,链表、一维数组、字典、List<T>和ArrayList是常见的数据集合类型,它们各有优缺点,适用于不同的场景。以下是它们的比较: 1. 一维数组 (T[]) 优点: 性能高:数组在内存中…...
多线程下jdk1.7的头插法导致的死循环问题
20250208 多线程下jdk1.7的头插法导致的死循环问题 多线程下jdk1.7的头插法导致的死循环问题 【新版Java面试专题视频教程,java八股文面试全套真题深度详解(含大厂高频面试真题)】 jdk1.7在hashmap扩容时使用的是头插法,所以扩容…...
MySQL的深度分页如何优化?
大家好,我是锋哥。今天分享关于【MySQL的深度分页如何优化?】面试题。希望对大家有帮助; MySQL的深度分页如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL在处理深度分页(即查询页数较大时,通常是查询…...
