CSP-S 2025 提高级模拟赛 Day6 复盘 A.选择方案

news/2025/10/13 21:20:24/文章来源:https://www.cnblogs.com/NotMonika/p/19139414

题面

给出 \(n\) 个数 \(a_i\),求出 \(a_i+a_j\geq s\)\(i,j\) 总数。

赛时想法

从前往后考虑所有在 \(i\) 之前的,大于 \(s-i\) 的数,\(i\) 可以与这些数配对。自然而然就想到用pbds里的平衡树维护。
预估复杂度 \(\mathcal{O}(n \log n)\)\(n\leq2\times10^5\) 完全没有问题。
7min就敲完了。

#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
int n,s,x,ans,v;
using T=tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>;
T tr;
int main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> s;while(n--){cin >> x;T t1;tr.split({s-x,998244353},t1);ans+=t1.size();tr.join(t1);tr.insert({x,++v});}cout << ans;
}

结果:炸了,30pts。

赛后回顾

仔细研究了一下自己原来的代码,想起来split好像不是 \(\mathcal{O}(\log n)\) 的,改成了order_of_key。改后测得70pts。

#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
int n,s,x,ans,v;
using T=tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>;
T tr;
int main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> s;while(n--){cin >> x;ans+=tr.size()-tr.order_of_key({s-x,998244353});tr.insert({x,++v});}cout << ans;
}

检查了一下,发现方案数可能达到 \(n^2\) 级别,需要开long long。测得100pts。

#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
#define int long long
int n,s,x,ans,v;
using T=tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>;
T tr;
int32_t main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> s;while(n--){cin >> x;ans+=tr.size()-tr.order_of_key({s-x,998244353});tr.insert({x,++v});}cout << ans;
}

反思

  1. tree的split操作复杂度不对,容易变 \(\mathcal{O}(n^2)\)
  2. 再也不删#define int long long了,删了不知道下次哪道题就炸了。

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

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

相关文章

“不要通过共享内存来通信”——深入理解Golang并发模型与CSP理论

“不要通过共享内存来通信”——深入理解Golang并发模型与CSP理论Golang 在设计上另辟蹊径,其并发哲学的核心信条是:“不要通过共享内存来通信,而要通过通信来共享内存。” (Do not communicate by sharing memory;…

SSL证书批量申请终极指南:一次搞定所有域名

免费好用的SSL证书选lcjmSSL,多域名、泛域名都能办,自动流程超省心,安全防护马上有!您的网站必须安装SSL证书? 数据加密,保护隐私:这是最核心的作用。防止用户敏感信息在传输过程中被窃取或篡改。 身份认证,防…

详细介绍:百度C++实习生面试题深度解析(下篇)

详细介绍:百度C++实习生面试题深度解析(下篇)2025-10-13 21:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

npm install creat-vue命令使用报错解决方法

IDEA使用 npm install creat-vue命令的时候出现以下报错! image 可以使用npm init vue@latest就可以解决问题

ARM(IMX6ULL)——通信(IIC/I2C) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PDF转图片工具:基于PyQt5的完整实现与深度解析 - 详解

PDF转图片工具:基于PyQt5的完整实现与深度解析 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

MongoDB安装及使用

安装参考教程: https://dblab.xmu.edu.cn/blog/3980/ 作业要求: 在电脑中完成MongoDB的安装,并通过MongoDB Shell新建一个以自己名字(英文全拼,例如Sunjing)的数据库,并创建一个名为“grade”的集合, 在该集合中…

从Gemini Robotics看通用机器人的科技路径

从Gemini Robotics看通用机器人的科技路径pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

张量的基本操作

从现在开始学习李沐的动手学习深度学习 学习深度学习这个科目,我们必须从基础概念开始学习 对于一个机器学习来说,关键的组件如下:可以学习的数据 如何转换数据的模型 一个目标函数, 用来量化模型的有效性 调整模型…

Windows7 隐藏用户

前言 当你在使用电脑时,真的确信只有你一个人在使用吗?会不会在某些不注意的角落,早已经有黑客悄悄潜入,创建了一个你不知道的用户? 漏洞实现 启动管理员cmd,并创建一个test\(用户,并将其分给administrators组。…

10 月记录

CF2159 CF2152 http://192.168.102.138/JudgeOnline/contest.php?cid=2310 http://192.168.102.138/JudgeOnline/contest.php?cid=2312 http://192.168.102.138/JudgeOnline/contest.php?cid=2314 https://htoj.com…

统计学习方法学习Day01

学习了统计学习方法的第一章 1.5正则化与交叉验证 (1)正则化的目的是模型选择的一个经典方法,正则化的是要使风险最小化的策略。正则化实在经验风险上加上一个正则化项,正则化项主要是防止模型在训练过程中出现过拟…

gpt-5-codex vs gpt-5

非常好的问题——你这张截图展示的是一个模型选择界面,列出了两组模型:gpt-5-codex 系列 和 gpt-5 系列,每组又细分成 low / medium / high 等不同等级(有的还有 minimal)。下面是它们的对比与推荐使用场景分析:…

Jenkins Share Library开发入门(一)

写在前面 今日心情有点小丧,但总体问题不大,有一些突然来的活,还没整完,明天再继续搞把。 有难度吗? 有一些把,我觉得还是要做一些自己不擅长的工作,才会有成长的吧,为什么? 用我们测试同学的话术,就是提升“…

第十三篇

今天是10月13号,今天是满课,上午学习了栈的相关知识,下午学习了Java。

网络安全基础--第五课:跨站脚本攻击XSS - 实践

网络安全基础--第五课:跨站脚本攻击XSS - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

成员内部类

成员内部类在类的内部定义,与实例变量,实例方法同级别的类外部类的一个实例部分,创建内部类对象时必须依赖外部类对象Outer out = new Outer(); Inner in = out.new Inner();//外部类 public class Outer {//实例变…

用 Fortran 进行英文数字验证码识别

一、引言 Fortran 是历史最悠久的高级语言之一,广泛应用于数值计算与工程模拟。在验证码识别方面,尽管 Fortran 并不是图像处理或 OCR 的主流语言,但我们可以借助系统调用与外部 OCR 工具如 Tesseract 实现简单的验…

webpack优化前端性能

Webpack 优化前端性能主要从构建时优化和运行时优化两个维度进行。以下是全面的优化方案: 1. 代码分割与按需加载 1.1 动态导入 (懒加载) // React 路由懒加载 const Home = lazy(() => import(/* webpackChunkNam…

2025.10.13总结 - A

今天满课,生活充实且乏力。加油