『模拟赛』多校A层冲刺NOIP2024模拟赛16

Rank

依托,给我烂完了(

image

A. 四舍五入

唐题,赛时被硬控 3h。

发现枚举 \(i\) 是一个很没前途的选择,分成三段后仍然需要 \(\mathcal{O(n)}\) 去跑 \(\left[1,\lfloor{\frac{i}{2}}\rfloor\right]\) 这一段,复杂度仍是 \(\mathcal{O(n^2)}\) 的,只有 30pts。

正难则反,我们换个角度考虑枚举 \(j\),对于一个 \(j\) 而言,其有贡献的 \(i\) 的区间是固定的,我们可以记录这些区间,用差分的思路做,得出每个 \(i\) 的答案,但这样算会有调和级数 \(n\ln n\) 左右段区间,空间就炸了,因此直接记录在每个 \(i\) 上对后续产生的新贡献即可,这样空间就是线性的,时间复杂度是 \(\mathcal{O(n\ln n)}\)。注意区间的右端点不特殊处理的话最大会达到 \(2n\),空间要开大一倍。

ps:发现用逗号会比用分号慢 100ms 左右,望周知。

点击查看代码
#include<bits/stdc++.h>
#define fo(x, y, z) for(register int (x) = (y); (x) <= (z); (x)++)
#define fu(x, y, z) for(register 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 P_B(x) push_back(x)
#define M_P(x, y) make_pair(x, y)
const int Ratio = 0;
const int N = 2e6 + 5;
const int mod = 1e9 + 7;
int n, tot;
int a[N << 1];
namespace Wisadel
{short main(){freopen("count.in", "r", stdin), freopen("count.out", "w", stdout);n = qr;fo(i, 1, n) for(int l = 0; l <= n; l += i){a[l]++;a[l + i / 2 + (i & 1)]--;}int now = 1, res = a[0];fo(i, 1, n){res += a[i];printf("%d ", res);}return Ratio;}
}
signed main(){return Wisadel::main();}

B. 填算符

人类智慧思维题。

发现这 \(k\) 个 & 放到前 \(k\) 个空中一定能保证权值最大,因此 \(\mathcal{O(n^2)}\) 的思路很好出,我们双指针每次考虑 \(i\) 是否能替换 \(j\) 上的 &,判断标准直接 \(\mathcal{O(n)}\) 跑一遍算出结果比较即可。

发现我们做了巨大多次无用计算,考虑用 st 表优化。依旧是倒序考虑,考虑当前位 \(i\) 能否放置 &,只需要用 st 表求出 \(\left[1,i\right]\) 中前 \(j-1\) 个为 & 后面为 | 的值再 & 上当前值 \(a_{i+1}\),判断其能否满足当前的需求,需求初始为最大权值。若满足则直接将其入栈记录答案,否则该位上符号为 |,那么 \(a_{i+1}\) 一定对答案有贡献,我们的需求可以进一步降低为最大权值中 \(a_{i+1}\) 无法满足的,即二进制下一些最大权值为 1 而 \(a_{i+1}\) 不为 1 的数位的按位或和

感性理解下,就是我们现在需要满足一些条件,其中一些条件已经确定可以满足,那么前面只需满足其他的条件即可。

理解了这道题就做完了,复杂度主要是 st 表预处理的 \(\mathcal{O(n\log n)}\),双指针下判断可以 \(\mathcal{O(n)}\) 做。

点击查看代码
#include<bits/stdc++.h>
#define fo(x, y, z) for(register int (x) = (y); (x) <= (z); (x)++)
#define fu(x, y, z) for(register 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 P_B(x) push_back(x)
#define M_P(x, y) make_pair(x, y)
const int Ratio = 0;
const int N = 1e6 + 5;
const int mod = 1e9 + 7;
int n, k;
int lg[N];
ll a[N], sta[30][N], sto[30][N];
bool yz[N];
stack<int> ans;
namespace Wisadel
{inline ll Wgta(int l, int r){if(l > r) return 0;int d = lg[r - l + 1];return sta[d][l] & sta[d][r - (1 << d) + 1];}inline ll Wgto(int l, int r){if(l > r) return 0;int d = lg[r - l + 1];return sto[d][l] | sto[d][r - (1 << d) + 1];}inline ll W(int l, int mi, int r){if(mi + 2 > r) return 0;return Wgta(1, mi + 1) | Wgto(mi + 2, r);}short main(){freopen("bitop.in", "r", stdin), freopen("bitop.out", "w", stdout);n = qr, k = qr;fo(i, 1, n) sta[0][i] = sto[0][i] = a[i] = qr;fo(i, 2, n) lg[i] = lg[i >> 1] + 1;fo(i, 1, lg[n]) fo(j, 1, n - (1 << i) + 1)sta[i][j] = sta[i - 1][j] & sta[i - 1][j + (1 << (i - 1))],sto[i][j] = sto[i - 1][j] | sto[i - 1][j + (1 << (i - 1))];ll tot = W(1, k, n);int j = k;fu(i, n - 1, 1){if(i <= j || !j) break;if(((W(1, j - 1, i) & a[i + 1]) & tot) == tot)ans.push(i), j--;else tot ^= (a[i + 1] & tot);}while(j) ans.push(j--);while(ans.size()) printf("%d ", ans.top()), ans.pop();puts("");return Ratio;}
}
signed main(){return Wisadel::main();}

C. 道路修建

比较困难的数据结构题。硬暴力有 10pts。

D. 逆序图

神秘题,暴力都不会打。

好烂的一场,开场切不出 T1 会无形带来巨大的压力,然后整场思维感觉都被冻住了,T1 T2 感觉都不算很难,但都只打了最低一档暴力分。

下午体育课,挥洒汗水后思维确实活跃了不少,鉴定为早上没跑操 + 没早读导致的(?)

出题人说上 100 没有 CSP-S 难(


完结撒花~

想什么呢

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

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

相关文章

10.31

删除上述路径文件 解决 配置 nodejs 时 配置源文件的地址 代码 出现命令不认识的问题

LINQ SelectMany的应用场景

示例 1:多层集合展平 假设你有一个列表,每个元素都是一个字符串数组,你想将所有的字符串展平成一个单一的字符串列表。 示例 2:嵌套循环 假设你有一个用户列表,每个用户有一个订单列表,你想获取所有用户的订单列表。 示例 3:多对多关系 假设你有一个学生列表,每个学生…

数据可视化 matplotlib

数据可视化数据可视化指的是通过可视化表示来探索的数据,它与数据挖掘紧密相关,而数据挖掘指的是使用代码来探索数据集的规律和关联。在基因研究、天气研究、政治经济分析等众多领域,大家都使用python来完成数据秘密集型工作。数据科学家使用python编写了一系列令人印象深刻…

算法网关视频分析网关周界入侵智慧营业厅视频管理系统设计方案

在现代商业环境中,尤其是对于金融服务、零售和客户服务等高度依赖客户互动的行业,营业厅的智能化管理变得尤为重要。为了提升服务质量、保障客户安全、优化运营效率,我们推出了一款集成了最新人工智能技术的智能视频监控解决方案。 一、项目方案 本项目包含:控制平台、AI算…

2024-2025-1 20241401 《计算机基础与程序设计》 第六周学习总结

班级链接 2024计算机基础与程序设计作业要求 第六周作业作业目标 ①Polya如何解决问题 ②简单类型与组合类型 ③复合数据结构 ④查找与排序算法 ⑤算法复杂度 ⑥递归 ⑦代码安全教材学习内容总结 《计算机科学概论》第七章如何解决问题,包括提出问题、寻找熟悉的情况、分治法、…

在使用asm包进行动态类加载的时候的打包问题

如图所示,开发时使用的jdk包下面的asm包,在进行打包时提示asm包不存在,打包方式使用如下: 目前提供两种解决方案: 1:修改打包方式,将jdk的包也打进去:<plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> &…

线段树 树状数组

线段树 常用于维护区间值 代码 和题解有很大差异,但是过了就好 void Pushup(int x) {s[x]=(s[x<<1]+s[x<<1|1]); } void Pushdown(int x,int l,int r) {s[x]=(s[x]+ad[x]*(r-l+1));if(l!=r) ad[x<<1]=(ad[x<<1]+ad[x]);if(l!=r) ad[x<<1|1]=(ad…

AI智能分析视频分析网关区域人数不足检测算法:智能监控的新篇章

在当今社会快速发展的背景下,公共场所如购物中心、交通枢纽、教育机构等地的人群聚集现象越来越普遍。如何高效地管理和控制这些区域的人流,保障安全的同时提升服务水平,成为一个迫切需要解决的挑战。传统的人流统计方法,例如人工计数或基础的传感器技术,常常因效率低和准…

Scrum适用于什么样的项目团队

Scrum适用于以下类型的项目团队:一、跨功能团队;二、小型至中型团队;三、自我组织团队;四、敏捷愿望团队;五、拥有开放沟通文化的团队;六、追求迭代增量开发的团队;七、善于应对变化的团队。其中,跨功能团队是Scrum适用的核心条件,它能够独立完成项目的各个阶段。一、…

HTB-Cicada 靶机笔记

Cicada 靶机笔记 概述 HTB 的靶机 Cicada 靶机 靶机地址:https://app.hackthebox.com/machines/Cicada 很有意思且简单的 windows 靶机,这台靶机多次利用了信息枚举,利用不同的信息一步一步获得 root 权限 一、nmap 扫描 1)端口扫描 -sT tcp 全连接扫描 --min-rate 以最低…

云原生开源开发者沙龙丨AI 应用工程化专场杭州站邀您参会

云原生开源开发者沙龙 AI 原生应用架构专场,邀您一起交流,探索 AI 原生应用的工程化落地!云原生开源开发者沙龙 AI 原生应用架构专场,邀您一起交流,探索 AI 原生应用的工程化落地! 活动简介 AI 驱动的应用程序开发、部署和运维,给应用带来了新的生命力和想象空间。但大部…