CSP-S 23

news/2025/10/20 21:41:18/文章来源:https://www.cnblogs.com/HS-fu3/p/19153731

9.17

109=9+100

赛时将剩余时间“明智”的投入t4,结果就是后两题没分。

t1

三维前缀和+二分答案

写了个假的kdt调了2h...

二分显然是好想的。

看值域考虑复杂度: \(256\times 256\times 256\times 8=134217728\) 可过

所以三维前缀和。

其实想到这个就基本没什么问题了。

注意:为方便统计前缀和,将每个坐标均加1

code

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, K, up;
int sum[260][260][260], cnt[260][260][260];inline bool check(int lim)
{for (int i = 1; i + lim <= up; ++i)for (int j = 1; j + lim <= up; ++j)for (int k = 1; k + lim <= up; ++k){int x = i + lim, y = j + lim, z = k + lim;int cnt = sum[x][y][z] - sum[x][y][k - 1] - sum[i - 1][y][z] + sum[i - 1][y][k - 1] - sum[x][j - 1][z] + sum[i - 1][j - 1][z] + sum[x][j - 1][k - 1] - sum[i - 1][j - 1][k - 1];if (cnt >= K)return 1;}return 0;
}signed main()
{freopen("rgb.in", "r", stdin);freopen("rgb.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cin >> n >> K;for (int i = 1, x, y, z; i <= n; ++i){cin >> x >> y >> z;++x, ++y, ++z;++cnt[x][y][z];up = max({x, y, z, up});}for (int i = 1; i <= up; ++i)for (int j = 1; j <= up; ++j)for (int k = 1; k <= up; ++k){sum[i][j][k] = sum[i][j - 1][k] + sum[i - 1][j][k] - sum[i - 1][j - 1][k] + sum[i][j][k - 1] - sum[i - 1][j][k - 1] - sum[i][j - 1][k - 1] + sum[i - 1][j - 1][k - 1] + cnt[i][j][k];}int l = 0, r = up, ans = r;while (l <= r){int mid = (l + r) >> 1;if (check(mid))r = mid - 1, ans = mid;elsel = mid + 1;}cout << ans << "\n";return 0;
}

t2

很不理解为什么这题是t2

赛时t1 2h没写对已经以为要保单了,结果t2救回来了,30min切了。

题目都给你提示了...

观察到 \(m\le n^2\) ,不难想到同为 \(O(n^2)\) 的冒泡排序,进而发现这题就是手动冒泡排序...

具体的:

我们对于 \(1\le i \le n\) ,若 $a_i\neq b_i $ ,则在 \(a\) 数组中向后找到第一个值等于 \(b_i\) ,若找不到则无解,之后手动把它冒泡到 \(i\) 即可。

code

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int T, n, cnt;
int a[N], b[N];
pair<int, int> ans[N * N];inline bool solve(int now)
{int id = 0;for (int i = now + 1; i <= n; ++i)if (b[now] == a[i]){id = i;break;}if (!id)return 0;for (int i = id; i > now; --i){if (a[i - 1] <= a[i])return 0;swap(a[i - 1], a[i]);ans[++cnt] = make_pair(i - 1, i);}return 1;
}signed main()
{freopen("sort.in", "r", stdin);freopen("sort.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cin >> T;while (T--){// cout << "T=" << T << "\n";memset(ans, 0, sizeof(ans));cnt = 0;cin >> n;for (int i = 1; i <= n; ++i)cin >> a[i];for (int i = 1; i <= n; ++i)cin >> b[i];bool bz1 = 1, bz2 = 1;for (int i = 1; i <= n; ++i) //-1{if (a[i + 1] < a[i])bz1 = 0;if (a[i] != b[i])bz2 = 0;}if (bz2){cout << 0 << "\n"<< 0 << "\n";continue;}if (bz1){cout << -1 << "\n";continue;}for (int i = 1; i <= n; ++i){if (a[i] != b[i]){if (!solve(i)){cout << -1 << "\n";bz1 = 1;break;}}}if (bz1)continue;if(cnt>n*n){cout << -1 << "\n";continue;}cout << 0 << "\n";cout << cnt << "\n";for (int i = 1; i <= cnt;++i)cout << ans[i].first << ' ' << ans[i].second << "\n";}return 0;
}

t3

这题暴力是数位dp,正解就是推式子。

\(m\) 表示进制, \(n\) 表示位数。

我们考虑到对于每一种合法情况其中每一位数均小于 \(m\)

对于均小于 \(m\) 这一限制,直接做并不好求。

将其转化:

二项式反演

\(f(i)\) 表示至少有 \(i\) 位为 \(m\),\(g(i)\) 表示恰好有 \(i\) 位为 \(m\)

则答案只累加 \(f(0)\) .

\(f(0)=\sum_{i=0}^{n}(-1)^{i-0}\dbinom{i}{0}g(i)\)

即:

\(f(0)=\sum_{i=0}^{n}(-1)^i g(i)\)

\(dp_{i,j}\) 表示到 \(i\) 位,恰好有 \(j\) 位为 0 的方案数

所以 \(ans=\sum_{i=1}^ndp_{i,0}\)

考虑求 \(g(i)\) .

\(tot_i\) 表示第 \(i\) 位的后缀和 ,钦定 \(k\) 位为 \(m\),当前位填入 \(j\).

\(g(k)=\dbinom{n-i}{k}\dbinom{tot_i-j-k\times m+n-i-1}{n-i-1}\)

解释:

第一个组合数是考虑这 \(k\) 个数的位置。

第二个组合数使用插板法:

剩下的值为 \(tot_i-k\times m\)

对于剩下的 \(n-i-1\) 个数进行插板,因为可为0,所以值加上 \(n-i-1\)

所以最终 \(ans=\sum_{i=1}^n\sum_{j=0}^{a_i-1}\sum_{k=0}^{n-i}\dbinom{n-i}{k}\dbinom{tot_i-j-k\times m+n-i-1}{n-i-1}\)

这样转移即可97

(\(O(n^3)\)能97数据什么水平不评价)。

考虑优化:

观察发现对于最内层循环本质上是求杨辉三角中某一列的部分区间和,前缀和思想即可优化。

code

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 1e9 + 7;
const int N = 2010;
const int M = N * N;
int n, m, tot;
int a[N];
int f[M], inv[M];inline int km(int a, int b)
{int ans = 1;while (b){if (b & 1)ans = ans * a % mod;a = a * a % mod;b >>= 1;}return ans;
}inline void init()
{f[0] = 1, inv[0] = 1;for (int i = 1; i < m * n; ++i){f[i] = f[i - 1] * i % mod;inv[i] = km(f[i], mod - 2);}
}inline int C(int a, int b)
{if (a < b)return 0;return f[a] * inv[b] % mod * inv[a - b] % mod;
}signed main()
{freopen("dba.in", "r", stdin);freopen("dba.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cin >> m >> n;init();for (int i = 1; i <= n; ++i)cin >> a[i], tot += a[i];int ans = 0;// 二项式反演for (int i = 1; i <= n; ++i){for (int k = 0, op = 1; k <= n - i; ++k, op = -op) // 之后钦定k个为mans = (ans + op * C(n - i, k) % mod * (C(tot - k * m + n - i, n - i) - C(tot - a[i] - k * m + n - i, n - i) + mod) % mod + mod) % mod;tot -= a[i]; // 后缀和}cout << (ans + mod) % mod << "\n";return 0;
}

t4

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

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

相关文章

Recall

可惜了,这静谧的长夜。 是夕阳,余晖照在我的肩上。 惨白的灯喧哗着。 昏黑,安静的可怕。 滴答,滴答。 滴答,滴答。 昏黑,安静的可怕。 惨白的灯喧哗着。 是夕阳,余晖照在我的肩上。 可惜了,这静谧的长夜。

CSP-S 20

9.119.11 今天是挂分的好日子~~~ 101=0+10+91 t1 追逐游戏 (chase) 倍增+k祖先 算了不想写了....... 第2次没保存然后死机丢失了... 不难理解也不难实现,细节手模即可。 t1 就这样吧,看代码。 code点击查看代码 #…

Flutter应用设置插件 - 轻松打开iOS和Android系统设置

一个功能强大的Flutter插件,支持从应用中直接打开iOS和Android系统的各种设置页面,包括位置、Wi-Fi、通知、蓝牙等系统设置,简化了用户设置跳转流程。app_settings 一个用于从Flutter应用中打开iOS和Android手机设置…

CSP-S 22

9.169.16 原来史可以连着吃 挂了100 t1 简单贪心,不多解释。 没有大样例爆了 code点击查看代码 #include <bits/stdc++.h> #define int long long using namespace std; const int inf = 1e18; int minn; int T…

/usr/bin/sudo 二进制文件的权限有问题,导致所有用户都无法使用 sudo

[root@node1 sudoers.d]# su - student [student@node1 ~]$ sudo whoami sudo ls /root -bash: /usr/bin/sudo: Permission denied -bash: /usr/bin/sudo: Permission denied 问题很明确了!在 node1 上,/usr/bin/sud…

MySQL 8.0.43社区版本安装流程

MySQL 8.0.43社区版本安装流程> 1. MySQL的下载 点击MySQL官网地址进入https://www.mysql.com/cn/,选择页面download,选择社区版本下载。选择对应自己主机机型下载Windows或者Linux版本的,这里以Windows版本为例子…

CSP-S 19

9.109.10 125=10+20+75+20 废话 模拟赛能不能类人一点??? 因为四道题所以四个样例是吧,你给那小样例有任何作用吗我请问呢? t1 染色(color) 结论题 赛时想假了(你但凡有个稍微大点的样例我也不会想这么假) 显然…

LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习

代理系统或者 RAG 方案,基本都需要一个双层记忆架构,这样 LLM 既能保持对当前上下文的专注,又能记住过往交互的内容。 短期记忆负责单个会话内的即时信息管理,长期记忆则跨会话存储知识,让系统能够持续学习和进化…

【HOWTO】购买和销售二手测试仪器指南

测试仪器是电子工程师、技术人员和电子爱好者在进行信号分析、测量和诊断时不可或缺的工具。尽管全新的测试仪器通常能提供最先进的技术,但价格往往较高,特别是对于预算有限的人。因此,二手测试仪器市场成为了一种经…

CSP-S 18

9.89.8 100+0+20+0 废话 赛时t1先打的暴搜,大数据直接飞了,折半搜即过,30min(当时感觉写的挺快应该不会很差)。 t2先模样例,哎怎么不对?哦少考虑情况。哎怎么还是不对?啊乘写成加了... 各种唐诗错误开始发力了,…

研1转码自学黑马程序员Python第7天 | Python函数知识 - 指南

研1转码自学黑马程序员Python第7天 | Python函数知识 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

小马算力致敬程序员

10 月 20日凌晨,我把最后一条 CI 流水线从自建 GPU 机器迁移到小马算力,推送、合并、触发——单元测试跑完,账单弹出:0.82。 同一时刻,公司群里弹出财务提醒:上月闲置显卡折旧 4 300。那一刻,我意识到“算力”这…

Project. 2025.11化学小组pre

\(\boldsymbol{Project.}\) 2025.11 化学小组pre \(\rm I\) 选题阶段 \(\it 1.1\) 超导 【文献堆】介绍超导(泛) 常压下双层结构镍氧化物薄膜高温超导电性的发现与研究展望 高压下金属硼碳(氮)化合物的结构及超导电…

蛋白表达标签:重组蛋白研究的精妙引擎

在重组蛋白的世界里,效率与精准是核心追求。如何从复杂的细胞裂解液中快速捕获目标蛋白?如何直观地追踪其表达与定位?又如何让那些难以折叠的蛋白稳定溶解?这些问题的答案,常常不在于蛋白本身,而在于一个精妙的分…

106.腾讯地图位置服务再出错

106.腾讯地图位置服务再出错我再实现项目的一个客户端登录时候 出现问题为了实现此功能之前关于地图调用的总结https://www.cnblogs.com/gaodiyuanjin/p/19135390 以为换了就好了 但项目已经使用这个 顺便插一下 项目中…

Luogu P10034 「Cfz Round 3」Circle 题解 [ 蓝 ] [ 背包 DP ] [ 质数筛 ] [ 图论 ] [ 构造 ]

Circle:思维难度并没有很大,难点主要还是细节的特判上。 先转化题意:构造一张无自环的有向图,使得每个点的出度、入度均为 \(1\),并且部分点走 \(l\) 步后必须回到自己。 因为每个点的出度、入度均为 \(1\),所以…

2025.10.20模拟赛

赛时 T1是原...10分钟过了 然后先看了眼3个题,T2感觉可推,T3感觉更简单 想开T3,然后想到还是按顺序开吧,所以开的T2 先推了一会重复的性质,发现什么也没有 此时1h过去了 然后想到前缀和的性质,然后没怎么证明,然…

20232410 2025-2026-1 《网络与系统攻防技术》实验二实验报告

20232410 2025-2026-1 《网络与系统攻防技术》实验二实验报告 一、实验内容回答问题: (1)例举你能想到的一个后门进入到你系统中的可能方式? 比如某些钓鱼邮件或者钓鱼网站,携带着一些捆绑着后门程序的exe文件。若…

SQLite简单使用

SQLite的简单使用记录创建数据库创建完成简单使用先进行一个链接一个表 一个视图创建表 输入表明创建列后面的就跟MySQL大差不差了创建完之后点击OK点击这个可以查看SQL语句