CF2129 CF1951 VP 记录

news/2025/10/3 15:53:32/文章来源:https://www.cnblogs.com/Ydoc770/p/19123430

非常好 hfu 开发的神秘打一场比赛改两场题,使我的国庆假期旋转.

CF2129 Div1

B

逆序对考虑在较小的数处统计贡献,枚举序列里面每个数,一并枚举逆序对的另一个数. \(p_i\) 有贡献当且 \(i>j\)\(2n-p_i\) 有贡献当且仅当 \(j<i\),取较小值即可.

C

构造交互,畏惧了.

注意询问可以选择相同的下标,返回的是合法子串的数量.

如果我们知道了一个左括号或一个右括号的位置,我们可以通过构造来尝试一次询问得到多个位置的信息. 一次询问形如:

\[(s_i(s_i\cdots(s_i((s_j(s_j\cdots \]

其中 \((s_i\) 重复 \(x\) 次,如果 \(s_i\)\()\) 贡献为 \({x(x-1)\over2}\),反之贡献为 \(0\). 为了能够根据询问信息正确解码信息,我们需要确定恰当的重复次数使得子集 \(\sum{x(x-1)\over2}\) 不等于另一个 \({y(y-1)\over2}\). 这个东西可以预先打表出来,每次最多询问 \(13\) 个位置的信息. 所以操作次数一部分是 \(\lceil{1000\over13}\rceil\). 为了确定一个左/右括号可以二分最小的前缀有 \(1\) 贡献的,当然可以直接拿 \(s_1\) 作为分隔符代替 \((\)\()\),因为最后可以拿贡献为 \(0\)\(O(1)\) 判断 \(s_1\) 是啥,然后反推回去得到整个串.

D

神秘区间 DP.

直接对 \(p_i\) 计数不好做,考虑为每个位置安排贡献. 一个重要的性质是当 \(x\) 位置被染色,那么左右的贡献就独立了,只能区间内的相互贡献,考虑用区间 DP 求解.

\(f_{i,j,a,b}\) 表示钦定区间 \([i,j]\) 贡献了 \(a\) 分到 \(l-1\)\(b\) 分到 $r+1,并且内部所有限制处理好的方案数. 考虑区间中 \(k\) 位置的限制怎么满足,显然转移是从 \(f_{i,k-1,a1,b1}\)\(f_{k+1,r,a2,b2}\). 如果 \(s_k\neq-1\),当且仅当 \(s_k=b_1+a_2\) 可以转移,否则都可以转移. 考虑贡献有先后顺序,两个子问题贡献到大问题,实际上随意交换顺序是不会改变的,所以乘上组合数 \({r-l\choose k-l}\). 即可.

看起来时空复杂度爆炸,然而每个位置被贡献 \(O(\log n)\) 次之后可贡献的范围就会退化成单点,所以时间复杂度是 \(O(n^3\log^3 n)\),空间复杂度 \(O(n^2\log^2 n)\).

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;const int maxn = 1e2 + 10, maxv = 2e2, mo = 998244353;
int T, n, s[maxn];
int f[maxn][maxn][12][12];ll fac[maxn << 1], ifac[maxn << 1];
ll qpow(ll x, ll y) {ll res = 1;while(y) {if(y & 1) (res *= x) %= mo;(x *= x) %= mo, y >>= 1;} return res;
}
void init() {fac[0] = ifac[0] = 1; for(int i = 1; i <= maxv; i++) fac[i] = fac[i - 1] * i % mo;ifac[maxv] = qpow(fac[maxv], mo - 2); for(int i = maxv - 1; i >= 1; i--) ifac[i] = ifac[i + 1] * (i + 1) % mo;
}
inline ll C(const int &x, const int &y) {return fac[x] * ifac[y] % mo * ifac[x - y] % mo;}inline int add(const int &x, const int &y) {return x + y >= mo ? x + y - mo : (x + y < 0 ? x + y + mo : x + y);}
inline void upd(int &x, const int &y) {return x = add(x, y), void(0);}void clearr() {for(int l = 0; l <= n; l++) for(int r = max(l - 1, 0); r <= n; r++) for(int a = 0; a < 12; a++) for(int b = 0; b < 12; b++) f[l][r][a][b] = 0;
}
void solve() {scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%d", &s[i]);for(int i = 2; i <= n; i++) if(s[i] <= 0) f[i][i][1][0] = 1; if(s[1] <= 0) f[1][1][0][1] = 1;for(int i = 0; i <= n; i++) f[i + 1][i][0][0] = 1;for(int len = 2; len <= n; len++) {for(int l = 1; l + len - 1 <= n; l++) {int r = l + len - 1;for(int k = l; k <= r; k++) {int ul = 0, ur = 0;if(l == 1) ur = 1;else if(r == n || l + r >= 2 * k) ul = 1;else ur = 1;if(s[k] == -1) {for(int a1 = 0; a1 < 12; a1++) {for(int b2 = 0; b2 < 12; b2++) {int sum = 0;for(int b1 = 0; b1 < 12; b1++) upd(sum, f[l][k - 1][a1][b1]);for(int a2 = 0; a2 < 12; a2++) upd(f[l][r][a1 + ul][b2 + ur], 1ll * sum * f[k + 1][r][a2][b2] % mo * C(r - l, k - l) % mo);}}}else {for(int b1 = 0; b1 < 12; b1++) {if(s[k] - b1 < 0 || s[k] - b1 > 11) continue;int a2 = s[k] - b1;for(int a1 = 0; a1 < 12; a1++) {for(int b2 = 0; b2 < 12; b2++) upd(f[l][r][a1 + ul][b2 + ur], 1ll * f[l][k - 1][a1][b1] * f[k + 1][r][a2][b2] % mo * C(r - l, k - l) % mo);}}}}}} int ans = 0; for(int a = 0; a < 12; a++) for(int b = 0; b < 12; b++) upd(ans, f[1][n][a][b]);printf("%d\n", ans); return clearr();
}int main() {// ios :: sync_with_stdio(false); cin.tie(0); cout.tie(0);init();cin >> T; while(T--) solve();return 0;
}

CF1951 Div2+Div1

D

神秘 ad-hoc,数据放二进制构造误导向,结果正解是 \(O(1)\).

分类讨论 \(n,k\) 的关系:

  • \(n<k\) 无解.
  • \(n=k\),设置一个价格为 \(1\) 的商店.
  • \(k<n<2k\),只有 \(n=2k-1\) 有解,容易构造.
  • \(n\ge2k\) 第一个商店价格 \(n-k+1\),由于 \(2(n-k+1)>n\),所以必然会剩下 \(k-1\),第二个价格设 \(1\) 即可.

放这种题何意味?

E

比较好的一道构造题.

\(pos_i=p^{-1}_i\),即数 \(i\)\(p\) 中的位置. 考虑 \(p\) 中逆序对,对答案的贡献,令 \(i<j\),有 \(p_i>p_j\)\(pos_{p_i}=i<j=pos_{p_j}\),即 \(pos_{p_i}<pos_{p_j}\). 由于 \(t\)\(pos_t\) 构成双射,且大小关系不同,所以无论 \(q\) 怎么取必定会对答案造成 \(1\) 的贡献. 同理,\(p\) 中顺序对的贡献在 \(q_i<q_j\) 时为 \(0\)\(q_i>q_j\) 时为 \(2\).

于是我们可以判断是否有解了. 现在我们要构造一个排列使得恰有 \(c\) 个逆序对,不妨将值域划分成两部分,用较小的一部分凑出 \(c\) 个逆序对,较大的部分升序放在最后不对前面造成贡献. 但是看不懂,放弃了.

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

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

相关文章

PWN-BUUCTF-test_your_nc

BUUCTF-test_your_nc的WPpwn 题目题解 使用nc连接题目地址,输入ls查看目录。使用cat命令获取flag文件内容得到flag。总结 题目考察nc的使用方法本文来自博客园,作者:ffff5,转载请注明原文链接:https://www.cnblog…

做网站设计需要具备哪些重庆市工程建设服务中心

中国科学院自动化研究所智能交互团队在环境鲁棒性、轻量级建模、自适应能力以及端到端处理等几个方面进行持续攻关&#xff0c;在语音识别方面获新进展&#xff0c;相关成果将在全球语音学术会议INTERSPEECH2019发表。现有端到端语音识别系统难以有效利用外部文本语料中的语言学…

电商网站建设目标分析的方法淘宝客网站建设方案书

机器学习是一项经验技能&#xff0c;经验越多越好。在项目建立的过程中&#xff0c;实 践是掌握机器学习的最佳手段。在实践过程中&#xff0c;通过实际操作加深对分类和回归问题的每一个步骤的理解&#xff0c;达到学习机器学习的目的 预测模型项目模板 不能只通过阅读来掌握…

Kafka Windows 安装启动与 YAML 配置全解析 - 实践

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

昆明专业建站装修设计公司服务

参考链接 FFmpeg源代码简单分析&#xff1a;avcodec_close()_雷霄骅的博客-CSDN博客_avcodec_close avcodec_close() 该函数用于关闭编码器avcodec_close()函数的声明位于libavcodec\avcodec.h&#xff0c;如下所示。 ​该函数只有一个参数&#xff0c;就是需要关闭的编码器的…

使用rem布局的网站网站开发5人小组分工

. 单论品牌&#xff08;主要以登山鞋及徙步鞋为主&#xff09;&#xff1a; 高级品牌&#xff1a;SCARPA、ASOLO、MONTRAIL、ZAMBERLAN、vasque、Lowa、La Sportiva 价格都较高&#xff0c;单价都在千元以上&#xff0c;品质一流&#xff0c;做工精细。 中档品牌&#xff1a;Tr…

详细介绍:计算机视觉:OpenCV+Dlib 人脸检测

详细介绍:计算机视觉:OpenCV+Dlib 人脸检测pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

怀化 网站建设国内网页加速器

文章目录 企业无线局域网部署最佳实践引言1. 无线网规划和设计a. 选择合适的频宽b. 网络规划工具c. 考虑物理环境d. 用户密度和需求e. 未来扩展f. 安全性和策略g. 测试和验证2. 无线局域网容量2.1 用户和设备预测2.2 应用流量分析2.3 带宽管理2.4 无线技术选择2.5 网络健康检查…

python 老生常谈的找2个excel相同列的行,把其中一个excel行的对应的值放入到另一个excel中

有个excel叫典型草原降水强度,还有个excel叫典型草原数浓度,这两个excel里面time和data_name列,time列里面的数据格式是YYYY-M-D空格H:S,data_name列里面是XXXX-时间戳,53192-20240510101700-20240510105559-0_N…

可信网站标识河南省考生服务平台官网

目录 服务端这么做服务端告知客户端使用 Basic Authentication 方式进行认证服务端接收并处理客户端按照 Basic Authentication 方式发送的数据 客户端这么做如果客户端是浏览器如果客户端是 RestTemplat如果客户端是 HttpClient 其它参考 服务端这么做 服务端告知客户端使用 …

wordpress建站优缺点服务中心网站建设意见

less 用来浏览超过一页的文件 用 / 可用来查找关键字 q键退出 cat -n 3.txt | less行号显示grep 文本处理工具&#xff0c;以行为单位找关键字 ls -l /boot | grep ^l grep 关键字 文件名 grep runlevel /etc/inittab 参数 -i忽略大小写 -n显示行号 -v排除关键字&#xff0…

【K8S】Kubernetes 调度器深度解析:原理与源码分析

@目录一、调度器架构概述1.1 核心架构设计1.2 调度器工作流程二、调度队列机制2.1 优先级队列实现2.2 Pod 优先级与抢占三、调度框架与插件系统3.1 框架扩展点3.2 插件注册与执行四、调度周期详细分析4.1 调度算法入口…

Elasticsearch MCP 服务器:与你的 Index 聊天 - 指南

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

AI大事记4:从 ELIZA 到 ChatGPT—— 对话式 AI 的世纪征程(上) - 详解

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

堆叠集成

为了让你彻底理解堆叠集成模型(尤其是项目中针对时序数据和小样本场景的定制化设计),我会从“核心概念拆解(结合项目实例)→ 分阶段运作流程(附代码细节)→ 设计逻辑深层原因(对应项目痛点)”三个维度,逐点展…

深入解析:逻辑回归(Logistic Regression)

深入解析:逻辑回归(Logistic Regression)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

快速幂算法的基础和扩展

快速幂 快速幂(Fast Exponentiation)算法解决这样一个问题:求解自然数的指数运算。计算 \(a^b\) 时,按照指数定义的朴素的方法是通过连续相乘: \[a^b = \underbrace{a \times a \times \cdots \times a}_{b\text{…

网站模块名称移动端首页

学完本文,您将了解不同相机模型分类、内参意义,及对应的应用代码模型 标定的意义 建模三维世界点投影到二维图像平面的过程。标定输出的是相机模型。 相机模型 相机模型可以解理解为投影模型 +

概率与决策 - 模拟程序让你在选择中取胜

在人生中我们会处处面临抉择,是选择A还是选择B呢。作为程序员,看着这种概率与决策,有时候常在想,我怎么做决策我的胜率概率最大,能不能用程序来模拟一下。我选择A赢的概率,我选择B赢的概率呢?前言 在人生中我们…

题解:qoj6504 Flowers Land 2

人类智慧题。 题意:给出一个由 \(0,1,2\) 组成的字符串,每次给出一个区间,使 \(a_i\leftarrow (a_i+1)\mod 3\) 或者询问区间能否通过删除相邻两项使得整个串被删除。 做法: 首先注意到每次一定删除一个奇数位置的…