2024/10/07 模拟赛总结

\(20+55+25+0=100\),压线拿到小饼干!

#A. A

可以发现 \(u_i=A,v_i=B,w_i=C\) 至少有一个成立,将这些点抽象到三位空间中。则原长方体一定被一个从 \((1,1,1)\) 出发的长方体打穿,但是似乎重叠部分比较难实现

对于从底打到顶的长方体,可以用后缀 \(\max\) 解决,然后原长方体就变成了阶梯状棱柱。然后横竖的操作就可以简化成一条线了,那么每一层剩下的数量可以直接计算

// BLuemoon_
#include <bits/stdc++.h>using namespace std;
using ull = unsigned long long;const int kMaxN = 3e7 + 5;int n, mx[kMaxN], mn[kMaxN], e[kMaxN], u[kMaxN], v[kMaxN], w[kMaxN], k[kMaxN], A, B, C;
__int128 p = 1, ans, cnt;ull Rand(ull &k1, ull &k2) {ull k3 = k1, k4 = k2;k1 = k4;k3 ^= (k3 << 23);k2 = k3 ^ k4 ^ (k3 >> 17) ^ (k4 >> 26);return k2 + k4;
}
void GetData() {ull x, y;cin >> n >> A >> B >> C >> x >> y;for (int i = 1; i <= n; i++) {u[i] = Rand(x, y) % A + 1;v[i] = Rand(x, y) % B + 1;w[i] = Rand(x, y) % C + 1;if (Rand(x, y) % 3 == 0) u[i] = A;if (Rand(x, y) % 3 == 0) v[i] = B;if ((u[i] != A) && (v[i] != B)) w[i] = C;}
}
void print(__int128 pr) {(pr < 10) ? putchar(pr + '0') : (print(pr / 10), putchar((pr % 10) + '0'));
}int main() {freopen("A.in", "r", stdin), freopen("A.out", "w", stdout);GetData();for (int i = 1; i <= n; i++) {if (w[i] == C) {e[u[i]] = max(e[u[i]], v[i]);} else if (u[i] == A) {mn[w[i]] = max(mn[w[i]], v[i]);} else if (v[i] == B) {mx[w[i]] = max(mx[w[i]], u[i]);}}for (int i = A; i; i--) {e[i] = max(e[i], e[i + 1]);}for (int i = C; i; i--) {mx[i] = max(mx[i], mx[i + 1]), mn[i] = max(mn[i], mn[i + 1]);}for (int i = 1, cur = A; i <= B; i++) {for (; cur && e[cur] < i; cur--) {}k[i] = cur;}for (int i = 1, lx = A, ly = B; i <= C; i++) {for (; lx > mx[i]; cnt += B - ly - max(0, e[lx] - ly), lx--) {}for (; ly > mn[i]; cnt += A - lx - max(0, k[ly] - lx), ly--) {}ans += cnt;}print(p * A * B * C - ans), cout << '\n';return 0;
}

#B. B

\(dp_{i,j}\) 为前 \(i\) 道工序有 \(j\) 个物品优于当前物品,由于每次只会删掉一个值,\(dp_{i,j}\) 只会更新到 \(dp_{i+1,j},dp_{i+1,j-1}\),所以可以直接美剧当前物品大力转移即可

// BLuemoon_
#include <bits/stdc++.h>using namespace std;
using LL = long long;const int kMaxN = 3e2 + 5;
const LL kP = 1e9 + 7;int n;
LL p[kMaxN], ans, l[kMaxN][kMaxN], r[kMaxN][kMaxN], dp[kMaxN][kMaxN];LL P(LL x, LL y, LL ret = 1) {for (; y; (y & 1) && ((ret *= x) %= kP), (x *= x) %= kP, y >>= 1) {}return ret;
}int main() {freopen("B.in", "r", stdin), freopen("B.out", "w", stdout);cin >> n;for (int i = 1; i < n; i++) {cin >> p[i];}for (int i = 1; i < n; i++) {l[i][0] = 1;for (int j = 1; j <= n - i + 1; j++) {r[i][j] = l[i][j - 1] * (j == n - i + 1 ? 1 : p[i]) % kP;l[i][j] = l[i][j - 1] * (kP + 1 - p[i]) % kP;}for (int j = 2; j <= n - i + 1; j++) {(r[i][j] += r[i][j - 1]) %= kP;}}for (int i = 1; i <= n; i++) {fill(dp[0], dp[n + 2], 0), dp[1][i] = 1;for (int j = 1; j < n; j++) {for (int k = 1; k <= i; k++) {if (dp[j][k]) {(dp[j + 1][k - 1] += dp[j][k] * r[j][k - 1] % kP) %= kP;(dp[j + 1][k] += dp[j][k] * (kP + 1 - r[j][k]) % kP) %= kP;}}}(ans += i * dp[n][1] % kP) %= kP;}cout << ans << '\n';return 0;
}

#C. C

由于 \(b\) 单调不升,如果 \([l,r]\)\(k\) 的出现次数小于 \(b_{r-l+1}\),则 \([l,r]\) 的多有包含 \(k\) 的子区间一定不合法

所以我们可以对于每一个出现次数不够的数直接割开进行分治,但是这样复杂度可能会被卡

我们尽量让割开的点靠近中点就可以将复杂度降成 \(O(n\log n)\) 所以我们枚举所有要断开的点,只断开最靠近中点的一个即可

// BLuemoon_
#include <bits/stdc++.h>using namespace std;const int kMaxN = 1e6 + 5;int n, a[kMaxN], b[kMaxN], ans;
unordered_map<int, int> mp;void Calc(int l, int r) {if (r < l || r - l + 1 <= ans) {for (int i = l; i <= r; i++) {mp[a[i]]--;}return;}if (r == l) {return mp[a[l]]--, (b[1] == 1) && (ans = max(ans, 1)), void();}int *p = &a[l], *q = &a[r], e = -1;for (; p <= q; p++, q--) {if (mp[*p] < b[r - l + 1]) {e = p - a;break;}if (mp[*q] < b[r - l + 1]) {e = q - a;break;}}if (!~e) {ans = max(ans, r - l + 1);for (int i = l; i <= r; i++) {mp[a[i]]--;}return;}if (e <= (l + r) / 2) {for (int i = l; i <= e; i++) {mp[a[i]]--;}Calc(e + 1, r);for (int i = l; i < e; i++) {mp[a[i]]++;}Calc(l, e - 1);} else {for (int i = e; i <= r; i++) {mp[a[i]]--;}Calc(l, e - 1);for (int i = e + 1; i <= r; i++) {mp[a[i]]++;}Calc(e + 1, r);}
}int main() {freopen("C.in", "r", stdin), freopen("C.out", "w", stdout);cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i], mp[a[i]]++;}for (int i = 1; i <= n; i++) {cin >> b[i];}Calc(1, n);cout << ans << '\n';return 0;
}

#D. D

人机线段树合并区间,题解和 std 都没看懂,先咕咕咕

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

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

相关文章

软件工程week2课程作业|“物品复活“软件开发

“物品复活”软件开发 作业要求 大学生经常有些物品觉得扔掉可惜,不处理又觉得浪费自己的地方。请你编写一个物品“复活”软件 该程序允许添加物品的信息(物品名称,物品描述,联系人信息),删除物品的信息,显示物品列表,也允许查找物品的信息 你实现的程序可以采用命令行…

[42] (多校联训) A层冲刺NOIP2024模拟赛03

今天的乐子今天的乐子2 昨天晚上做梦 梦见自己被关进戒网瘾学校 里面的老师全和疯子一样 然后我和这帮疯子老师比疯 疯子老师发现他们没我疯 所以就把我放了今天的乐子3 lhx 罗曼蒂克的辟谷A.五彩斑斓 赛时的想法 \(n^4\) 的做法,设 \(f_{i,j,k,l}\) 表示以 \((i,j)\) 为左上角…

Metasploit渗透测试框架学习(一)基本使用教程

1.Metasploit框架结构 1.1总览基础库文件Rex为最底层,实现网络套接字、网络应用协议、客户端服务端交互、数据库支持等 framework-core实现与上层模块交互的接口 framework-base对framework-core的扩展封装,用于提供各种接口供用户调用基于framework-base实现的六大模块Explo…

统计学(十三)——相关分析

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 相关分析是用于研究多个变量之间相互关系的统计方法,最早由英国统计学家卡尔皮尔逊(Karl Pearson)于1896年提出。皮尔逊通过对变量间线性关系的深入研究,…

前端模块化进化史:从全局 function 到 ES Modules

目前,前端开发已经离不开由 CommonJS、ES Modules 和 Webpack 构建的模块化开发环境。无论是 JavaScript、CSS、图片还是其他资源,都可以作为一个模块来处理。那么,模块化究竟是如何发展到今天的呢? 全局函数模式 最初的前端模块化尝试是通过 全局函数来实现的。例如,在一…

CF131C题解

贪心,优先队列,CF 2200传送门:https://codeforces.com/problemset/problem/134/C 关注到题目的两个限制:1. 一个人只能与另外同一人交换一张卡牌。2. 一个人只能交换自己原来颜色的卡牌。 对于2条限制条件,显然有贪心思路:尽量让更多的人手持原有的卡牌。对于当前待交换的…

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

『模拟赛记录』多校A层冲刺NOIP2024模拟赛03Rank 炸了,触底反弹A. 五彩斑斓(colorful) 签,又没签上。 考虑如何一步步优化暴力。最暴力的思想 \(\mathcal{O(n^4)}\) 枚举每个矩形,判断四个顶点颜色。稍微优化些,两次 \(\mathcal{O(n^2)}\) 跑出对于行/列每个点下一个与之…

加装spark-3.5.3

集群版本 hadoop-3.4.0 hive-3.1.3 zookeeper-3.9.2 hbase-2.6.0(1.0.0以上需要zookeeper-3.4.0以上) spark-3.5.3(只能选2.13.0) scala-2.13.0(jdk8仅支持x.x.0系)总结一下:JDK8和scala-2.13.0必选。1.安装scala 1.1 下载解压 tar zxvf scala-2.13.0.tgz 1.2 配置环境变…

高级程序语言第二次个人作业

高级程序语言第二次作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2024C/homework/13282学号 222200424姓名 赵伟豪编程练习3.13.23.33.43.53.63.73.8示例程序3.13.23.33.43.53.63.73.83.93.10总结与收获…

浏览器的渲染原理

浏览器渲染原理 五个渲染流程Parse 阶段:解析 HTMLStyle 阶段:样式计算三个阶段:收集,划分和索引所有样式表中存在的样式规则 访问每个元素并找到适用于该元素的所有规则,CSS 引擎遍历 DOM 节点,进行选择器匹配,并且匹配的节点执行样式设置 结合层叠规则和其他信息为节点…

CSP2024 前集训:多校A层冲刺NOIP2024模拟赛03

前言T1 没想到正难则反,脑瘫了没敢用 bitset(复杂度擦边但卡常能过),T2 空间开大了挂了 \(100pts\),\(T3\) 是原。 T1 五彩斑斓部分分 \(20pts\):\(O(n^4)\) 暴力。部分分 \(20+?pts\):进行一些优化,极限数据下仍是 \(O(n^4)\)。部分分 \(60\sim 100pts\):bitset 优化…

在C#中使用适配器Adapter模式和扩展方法解决面向的对象设计问题

之前有阵子在业余时间拓展自己的一个游戏框架,结果在实现的过程中发现一个设计问题。这个游戏框架基于MonoGame实现,在MonoGame中,所有的材质渲染(Texture Rendering)都是通过SpriteBatch类来完成的。举个例子,假如希望在屏幕的某个地方显示一个图片材质(imageTexture)…