『模拟赛』多校A层冲刺NOIP2024模拟赛27终结篇

Rank

rp++

image

A. 【模板】分治FFT

签。没取模挂 50pts。

列出式子发现无论何种合并方式,最终权值均为 \(\sum_{i=1}^n\ a_i\times (\sum_{j=i}^n\ a_i)\),因此求方案数即可。发现每一步相当于从当前堆数中任选两个出来,容易得出方案数为 \(\prod_{i=2}^{n}\binom{i}{2}\)。时间复杂度 \(\mathcal{O(n)}\)

点击查看代码
#include<bits/stdc++.h>
#define fo(x, y, z) for(int (x) = (y); (x) <= (z); (x)++)
#define fu(x, y, z) for(int (x) = (y); (x) >= (z); (x)--)
using namespace std;
typedef long long ll;
#define lx ll
inline lx qr()
{char ch = getchar(); lx x = 0, f = 1;for(; ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;for(; ch >= '0' && ch <= '9'; ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ 48);return x * f;
}
#undef lx
#define qr qr()
const int Ratio = 0;
const int N = 1e5 + 5;
const int mod = 998244353;
int n;
ll a[N], sum[N], jc[N];
namespace Wisadel
{// fang an shu zen me qiu ?/*1 12 13 34 185  o wo zhi dao le\prod_{i=2}^n \binom{i}{2}*/short main(){freopen("fft.in", "r", stdin), freopen("fft.out", "w", stdout);n = qr;jc[0] = jc[1] = 1;fo(i, 2, n) jc[i] = jc[i - 1] * ((1ll * i * (i - 1) / 2) % mod) % mod;fo(i, 1, n) a[i] = qr;fu(i, n, 1) sum[i] = (sum[i + 1] + a[i]) % mod;ll ans = 0;fo(i, 1, n) ans = (ans + a[i] * sum[i + 1] % mod) % mod;printf("%lld\n", ans * jc[n] % mod);return Ratio;}
}
signed main(){return Wisadel::main();}

B. 【模板】最近公共祖先

结论题。

首先比较显然的是,对于一个内含 \(k\) 条边连通块,最多的路径数量为 \(\lfloor\frac{k}{2}\rfloor\)。问题在于如何构造方案。

主要问题在于从哪开始拿。如果拿掉了割点连接的两边,可能会出现分出的两个连通块各余一条边的情况,显然不优。那么我们就需要在尽量保证图联通的情况下取。

首先遍历一遍全图,显然会得出一棵树。我们从最后遍历到的点开始抉择。首先排除选过的边且不考虑树边,剩下的边拿去后一定不影响图的连通性,因此将剩下的边两两组合并标记即可。发现可能会出现余下一条边无边可匹配的情况,此时我们再拿树边后,这个点就从树上删除了,依然不影响图的连通性,所以让该边与树边匹配并标记即可。如此回溯着做,就得出了一个构造方案。时间复杂度 \(\mathcal{O(n)}\)

注意给出的图可能并不联通。

点击查看代码
#include<bits/stdc++.h>
#define fo(x, y, z) for(int (x) = (y); (x) <= (z); (x)++)
#define fu(x, y, z) for(int (x) = (y); (x) >= (z); (x)--)
using namespace std;
typedef long long ll;
#define lx ll
inline lx qr()
{char ch = getchar(); lx x = 0, f = 1;for(; ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;for(; ch >= '0' && ch <= '9'; ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ 48);return x * f;
}
#undef lx
#define qr qr()
#define fi first
#define se second
#define pii pair<int, int>
#define ppi pair<pii, int>
#define M_P(x, y) make_pair(x, y)
#define P_B(x) push_back(x)
const int Ratio = 0;
const int N = 3e5 + 5;
int n, m;
int hh[N], to[N << 1], ne[N << 1], cnt = 1;
bool yz[N], vis[N << 1];
vector<ppi> ans;
namespace Wisadel
{inline void Wadd(int u, int v){to[++cnt] = v;ne[cnt] = hh[u];hh[u] = cnt;}inline void Wdfs(int u, int fa){yz[u] = 1;for(int i = hh[u]; i != -1; i = ne[i]){int v = to[i];if(v == fa) continue;if(!yz[v]) Wdfs(v, u);}int zc = -1;for(int i = hh[u]; i != -1; i = ne[i]){int v = to[i];if(!vis[i] && v != fa){vis[i] = vis[i ^ 1] = 1;if(zc == -1) zc = v;else ans.P_B(M_P(M_P(v, u), zc)), zc = -1;}}if(zc != -1 && fa){for(int i = hh[u]; i != -1; i = ne[i]){int v = to[i];if(v == fa){vis[i] = vis[i ^ 1] = 1;ans.P_B(M_P(M_P(v, u), zc));}}}}short main(){freopen("lca.in", "r", stdin), freopen("lca.out", "w", stdout);n = qr, m = qr;memset(hh, -1, sizeof hh);fo(i, 1, m){int a = qr, b = qr;Wadd(a, b), Wadd(b, a);}fo(i, 1, n) if(!yz[i]) Wdfs(i, 0);printf("%d\n", ans.size());for(auto i : ans) printf("%d %d %d\n", i.fi.fi, i.fi.se, i.se);return Ratio;}
}
signed main(){return Wisadel::main();}

C. 【模板】普通平衡树

唐唐唐,赛时打出了类似正解的东西,但是当时题读假了,导致以为这个做法不行就没再想(

考虑类似标记永久化的思想,查询可以一路走一路将新加的点加入序列一边求答案。但发现维护序列是一个很不可行的做法,多几个全局插入轻松炸空间。那么考虑到每次只会在结尾插入,即前面的序列早已固定,我们完全可以将处理好的序列只保留关键信息,在遍历线段树时通过 pushdown 处理序列信息,就可以直接得出答案。

考虑需要维护什么信息。首先一个结论是若 \(len>2\),则 \(ans=2+\sum_{i=2}^{len-1}[(a_i-a_{i-1})(a_{i+1}-a_i)\lt0]\)。合并两个序列时,显然两个序列满足后面的数量直接加和即可,额外需要考虑的是两个序列的交接处也可能有贡献,两次判断即可。因此我们需要维护区间长度、区间锯齿数量、左边两个数和右边两个数,搬到线段树上轻松做。时间复杂度 \(\mathcal{O(n\log n)}\)

点击查看代码
#include<bits/stdc++.h>
const int Ratio = 0;
const int N = 3e5 + 5;
int n, q, op, l, r, x;
struct rmm{int len, ans, le, le2, ri, ri2; rmm(){len = ans = le = le2 = ri = ri2 = 0;}} t[N << 2];
namespace Wisadel
{#define ls (rt << 1)#define rs (rt << 1 | 1)#define mid ((l + r) >> 1)inline bool Wck(int a, int b, int c){return (a > b && b < c) || (a < b && b > c);}inline rmm Wmerge(rmm A, rmm B){if(!A.len) return B; if(!B.len) return A; rmm res;res.ans = A.ans + B.ans; res.len = A.len + B.len; res.le = A.le, res.le2 = (A.len > 1 ? A.le2 : B.le); res.ri = B.ri, res.ri2 = (B.len > 1 ? B.ri2 : A.ri);if(A.len > 1 && Wck(A.ri2, A.ri, B.le)) res.ans++; if(B.len > 1 && Wck(A.ri, B.le, B.le2)) res.ans++;return res;}inline void Wpushdown(int rt){t[ls] = Wmerge(t[ls], t[rt]), t[rs] = Wmerge(t[rs], t[rt]);t[rt].len = t[rt].ans = t[rt].le = t[rt].le2 = t[rt].ri = t[rt].ri2 = 0;}inline void Wupd(int rt, int l, int r, int x, int y, int k){if(x <= l && r <= y){rmm zc; zc.len = 1, zc.le = zc.ri = k; t[rt] = Wmerge(t[rt], zc);return ;}Wpushdown(rt);if(x <= mid) Wupd(ls, l, mid, x, y, k);if(y > mid) Wupd(rs, mid + 1, r, x, y, k);}inline int Wq(int rt, int l, int r, int x){if(l == r) return std::min(t[rt].ans + 2, t[rt].len);Wpushdown(rt);return (x <= mid) ? Wq(ls, l, mid, x) : Wq(rs, mid + 1, r, x);}short main(){freopen("odt.in", "r", stdin), freopen("odt.out", "w", stdout);scanf("%d%d", &n, &q);for(int i = 1; i <= q; i++){scanf("%d%d", &op, &l);if(op == 1) scanf("%d%d", &r, &x), Wupd(1, 1, n, l, r, x);else printf("%d\n", Wq(1, 1, n, l));}return Ratio;}
}
signed main(){return Wisadel::main();}

D. 【模板】平面最近点对

看出来 2-sat 了,但对正解依然没头绪且没时间,于是打了 35pts 部分分挂到 15pts。

考虑到 noip 不考 2-sat,因此咕了。

终结篇,打的并不好,说明我还不会终结qwq(

T1 少取模实在没想到也不应该,不过考前犯这种错也不见得是坏事,起码能保证在 noip 上不犯这个唐。T2 一上来就钻进死胡同出不来,如果能把树的做法推出来可能就扩展出来了。T3 读成子串,唐唐唐,而且虚拟机上解压大样例输出文件少了一万组,问消费股他说是我代码写错了然后当时虚拟机上甚至上不去网站,被控了好久,最后到 Windows 下又下了一遍才发现问题,导致没时间看 T4。

T2 打了匈牙利不知道为啥还挂了,不过正好提醒了复习下二分图。

下午体育课依然打了篮球,第一把 0:6 翻成 11:10,进了三分,找回了点之前的感觉,有点爽。大家打的都越来越好了,可惜这可能是最后一次了(

有点伤感不知道为什么,OI 生涯结束是个很不敢想却又不得不坦然接受的事,和一帮志同道合的人共同奋斗一年多算是在平凡的高中生活中比较绚烂的一笔,结果最多算是个注脚,起码我享受到了过程,拼过了,就不会有遗憾。

祝所有 OIer noip rp++!


完结撒花~

NOIP 集训篇,结束!

image

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

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

相关文章

服装行业如何应对快速生产与库存管理挑战?

在服装行业,快时尚的浪潮让市场变化迅速,消费者的需求也在不断变化。而与此同时,企业面对的压力也越来越大——生产周期紧、库存管理难、设计和销售协调困难,往往导致一系列管理瓶颈。如何在如此竞争激烈的环境中提高生产效率、快速响应市场需求,同时确保库存不积压?这些…

智能佳科技—3台Aloha机械臂同发交付, 协同作战新纪元!

视频链接:https://mp.weixin.qq.com/s/JA3iaVqerm4owFYAkrYy8g近日,北京智能佳科技有限公司顺利完成三台Mobile Aloha机械臂的共同发货交付使用任务,再次展现了公司在机器人技术领域的深厚积累和卓越实力。 自2006年8月成立以来,智能佳科技始终秉持着务实创新的精神,连续四…

LiV-GS: LiDAR-Vision Integration for 3D Gaussian Splatting SLAM in Outdoor Environments

arxiv |哈工大发布 LiV-GS:户外环境中基于3D高斯泼溅的LiDAR-视觉集成SLAM系统 【LiV-GS: LiDAR-Vision Integration for 3D Gaussian Splatting SLAM in Outdoor Environments 】 LiV-GS: LiDAR-Vision Integration for 3D Gaussian Splatting SLAM in Outdoor Environments …

Drug2Cell 使用方法

Drug2Cell利用单细胞图谱和EMBL-EBI ChEMBL数据库中的1900万个药物-靶标相互作用。使用该方法能够对于基础医学的研究在后续应用上开拓思路。Drug2cell is a new computational pipeline that can predict drug targets as well as drug side effects.该软件是英国sanger研究所…

面试题精选16-Nginx的应用场景有哪些

1. Web服务器 Http配置Https配置2. 反向代理服务器 Nginx作为请求入口,客户端访问Nginx,Nginx再将请求转发到后端,最后响应给客户端,以此防止后端服务器对外暴露,提高服务器的安全性。3. 负载均衡 将Nginx作为负载均衡器,客户端访问Nginx时,Nginx采取某种策略(默认是轮…

九、Spring Boot集成Spring Security之授权概述

概要介绍授权概念及其实现流程,概要介绍Spring Security授权中的基本概念和授权种类实现技术及其适用场景目录前言一、授权概述二、用户权限三、用户授权流程三、Spring Security授权方式1、请求级别授权2、方法级别授权 前言 本文介绍什么是授权,Spring Security的授权配置有…

星期四计划

小玩一手CTF[BJDCTF2020]The mystery of ip 打开首页,三个页面,第一反应是xff伪造有思路了,但是扫目录,看源码还是要做的,避免漏掉东西(尝试后无果)try一下xff果真如此,到目前为止:一个XFF伪造3个页面(无接口参数)这种情况可以结合xff扫一下目录,然后重新看看代码,…

exam

机器学习 1、概念 机器学习:计算机模拟人进行学习,从数据中不断获取新的信息或技能以改善自身的性能 监督学习:教计算机如何去完成任务。它的数据集是有标签的,训练目标是能够给新数据(测试数据)以正确的标签(训练数据有目标数据项,用训练数据训练出目标模型) 分类问题…

Nuxt.js 应用中的 dev:ssr-logs 事件钩子

title: Nuxt.js 应用中的 dev:ssr-logs 事件钩子 date: 2024/11/28 updated: 2024/11/28 author: cmdragon excerpt: dev:ssr-logs 是一个用在服务器端渲染(SSR)中,用于输出日志的事件钩子。这个钩子会在请求周期结束时被调用,产生的参数包括日志路径与日志内容。这对于…

【开发者福音】腾讯云AI代码助手:沉浸式编程新功能——内联对话来袭!

亲爱的开发者们,你是否还在为采纳AI对话框里生成的代码,需要繁琐的复制、粘贴、插入而烦恼?是否渴望一种更自然、更直观的编程方式,让代码需求直接生成到你的编码区?告别繁琐,拥抱沉浸式编程,腾讯云AI代码助手全新推出——内联对话(Inline Chat)功能,让你的编程体验飞…

vxe-table v3 表格中使用 a- 集成 ant-design-vue 组件库的

在公司开发大型项目中,使用主流表格库 vxe-table v3 和 ant-design-vue 组件库,可以在可编辑单元格中渲染非常简单的使用更多的组件 官网:https://vxetable.cn 安装 npm install vxe-pc-ui@3.3.9 vxe-table@3.11.10 @vxe-ui/plugin-render-antd@3.0.1// ... import VxeUI f…

超好用!员工360度绩效评估互评考核表模板-附下载链接

如题,这是一套标准的员工360度评估互评考核表模板,用于线下通过纸质发放问卷做360度评估,可以根据企业的实际考核指标或行为进行调整。 当然了,简简人事也有业内专业且领先的在线360度评估考核系统,只需要少量的投入,可比线下纸质考核方式效率提升约100倍。 表格下载:员…