2025.10.13 测试

news/2025/10/15 10:00:15/文章来源:https://www.cnblogs.com/Augenstern-/p/19142258

1.

U612392 追忆

是一个小技巧

考虑在序列中尽量向前匹配,在那个位置计数

然后发现要求是对于一个元素,在其前面的元素与其之间的空隙不能有这个字符

所以可以枚举结尾位置

通过 $\sum _{i = 0}^n \binom{i - n - 1}{n - 1} \times 26^{n + k - i} \times 25^{i - n} $

简单计算即可

AC

2.

P11390 [COCI 2024/2025 #1] 教师 / Učiteljica

想到枚举右端点,然后统计和法左端点

\(k = 1\)

维护每种数的合法区间

然后相当于求非零位置和

是区间加和非 0 位置个数

把右端点看成 x 轴,合法左端点放到 y 轴上,其实就是一个简单的扫描线模版,不用离散化

有两种解决方案

  • 维护最小值及其个数

  • 维护区间覆盖次数

我写的第一种

\(k > 1\)

考虑其实是要求每种 k 都出现,相当于是求交集,不好写,转换成求并集容斥就行

复杂度 \(O(2^k \times k \times n \log n)\)

这个容斥的原理和并集转换是一样的

用二项式定理可以简单证明

AC

3.

P4922 [MtOI2018] 崩坏3?非酋之战!

前言

这是一篇 \(O(n)\) 的题解

NOIP 模拟赛放了这道题目

个人认为还是较为简单的

赛时思路完整推导

读完题目,发现没有关于时间的最优化,所以可以发现其实技能的很大一部分是被其他技能单调的

  • 闪避不如大招

  • 爱酱的炸弹不如技能

  • 犹大的誓约不如大招

其实时间暂停和减速都是 buff 在打伤害

  • 奥托之光由于清除 buff,没用

  • 律者之力不如大招

所以其实有用的技能只有 3 个

  1. 大招用于时间暂停 5s

  2. 技能用于获得 1 层燃烧 buff

  3. 分支攻击用于减速

此时设 dp[i][j] 表示当前有 \(i\) 层燃烧 buff , \(j\) 层减速的最大攻击值

直接每次转移三个技能就是 \(O(n^3)\)

for(int j = 0;j <= i;j ++) {for(int k = 0;k <= i - j;k ++) {if(f[j][k] == -inf) continue;int h = f[j][k] + (j + 1) * k * atk;g[j][k] = max(g[j][k] , h + 5 * k * atk + 12 * atk);g[j + 1][k] = max(g[j + 1][k] , h + 7 * atk);g[j][k + 1] = max(g[j][k + 1] , h + 8 * atk);}
}

然后 \(n^2\) 的解法就是通过分析大招与技能 / 大招与分支攻击的最优相对关系

(可以自己设当前有几层燃烧 buff和减速 buff ,然后列关系式)

分析出大招在最后更优

这样 dp 过程中只需要维护两个 buff , 然后每次最后的大招伤害可以 \(O(1)\) 计算

复杂度到了 \(O(n^2)\),已经可以通过了

然而我们可以继续剖析题目性质

我有两个猜测

  1. 三个技能是有顺序的,大概为燃烧,减速,大招

  2. 当 n 很大时显然主要靠燃烧 buff 打伤害

想到这里时 我们不想思考,可以打个表

#include<bits/stdc++.h>
#define int long long
using namespace std;template <typename T>
void _debug(const T& t) { std::cerr << t << '\n'; }
template <typename T, typename... Args>
void _debug(const T& t, const Args&...res) { std::cerr << t << ' '; _debug(res...); }
#define debug(...) _debug(#__VA_ARGS__ " =", __VA_ARGS__)const int N = 1e4 + 10 , inf = 1e18;
int n , hp , atk;
int f[1010][1010] , g[1010][1010] , pr[200][200][200];
void fa(int i) {debug(f[0][0]);int x = 0 , y = 0;for(int j = 0;j <= i;j ++)for(int k = 0;k <= i - j;k ++) if(f[j][k] > f[x][y]) x = j , y = k;debug(x , y , f[x][y]);for(int j = i;j >= 1;j --) {debug(j , x , y , pr[j][x][y]);if(pr[j][x][y] == 2) x --;else if(pr[j][x][y] == 3) y --;else if(!pr[j][x][y]) { cout << "WAWAWA---\n"; exit(0); }}
}signed main() {
//	freopen("c1.in","r",stdin);
//	freopen("c.out","w",stdout);cin >> n >> hp >> atk; atk /= 10;for(int j = 0;j <= n;j ++)for(int k = 0;k <= n;k ++) g[j][k] = -inf;g[0][0] = 0;for(int i = 0;i <= n;i ++) {int mx = 0;for(int j = 0;j <= i;j ++)for(int k = 0;k <= i - j;k ++) f[j][k] = g[j][k] , mx = max(mx , f[j][k]);if(mx >= hp) { fa(i); cout << i << '\n' << "LeiZeProMax Nb!!!"; return 0; }if(i == n) { fa(i); cout << mx << '\n' << "hks"; return 0; }for(int j = 0;j <= i + 1;j ++)for(int k = 0;k <= i + 1 - j;k ++) g[j][k] = -inf;if(i == 30) debug(f[15][15] , g[15][15]);for(int j = 0;j <= i;j ++) {for(int k = 0;k <= i - j;k ++) {if(f[j][k] == -inf) continue;int h = f[j][k] + (j + 1) * k * atk;if(h + 5 * k * atk + 12 * atk >= g[j][k]) pr[i + 1][j][k] = 1;g[j][k] = max(g[j][k] , h + 5 * k * atk + 12 * atk);if(h + 7 * atk >= g[j + 1][k]) pr[i + 1][j + 1][k] = 2;g[j + 1][k] = max(g[j + 1][k] , h + 7 * atk);if(i == 29 && j == 14 && k == 15) debug(g[j + 1][k] , pr[i + 1][j + 1][k]);if(h + 8 * atk >= g[j][k + 1]) pr[i + 1][j][k + 1] = 3;g[j][k + 1] = max(g[j][k + 1] , h + 8 * atk);if(i == 29 && j == 15 && k == 14) debug(g[j][k + 1] , pr[i + 1][j][k + 1]);}}}return 0;
}

打出来发现

看最后一列是转移点

发现是 燃烧减速交错 ?

不对结尾处不同,多打几个发现最后 10 个其实是固定的

所以程序告诉我们答案是 先燃烧减速交错,后 10 个直接叠 5 层减速,最后 5 个用大招

分析原因的话用上面第二个猜测,我们可以考虑只 buff 的伤害, 设当前有 x 层减速, y 层燃烧

则下一次打的伤害即为 \(x \times y\) ,由初中奥数可得,当 \(x + y\) 一定, \(x = y\)\(x \times y\) 最大

所以可得大部分是减速燃烧交错叠加

至于最后的特殊情况,其实也是好感性考虑的

减速其时是为后面每一次都增加 1 秒的攻击事件,是永久的

而大招暂停 5 秒是为当前轮增加 5 秒的攻击事件,是暂时的

从长远来看,我们当然是选择减速,但当后缀攻击次数小于 5 时,暂时性的大招反而具有优势

大招前叠 5 次燃烧,其实也是为了和后面的大招凑平方数

所以如果大招暂停时间更长,其后面的特殊情况的长度也会对应线性增长

至此就没了

代码

代码直接按上面的结论打即可,应该挺短的,注意长度不足 10 的情况

跑到了最优解,不卡常比非线性做法第一名快了 5 倍,线性做法不就应该比平方做法快吗?

下面是我赛时代码,可以参考结构 ?

注意输出的字符串不同

#include<bits/stdc++.h>
#define int long long
using namespace std;template <typename T>
void _debug(const T& t) { std::cerr << t << '\n'; }
template <typename T, typename... Args>
void _debug(const T& t, const Args&...res) { std::cerr << t << ' '; _debug(res...); }
#define debug(...) _debug(#__VA_ARGS__ " =", __VA_ARGS__)const int N = 1e4 + 10 , inf = 1e18;
int n , hp , atk;
int f[1010][1010] , g[1010][1010];
int col[N];
bool check(int x , int y , int mx) {for(int i = 1;i <= 5;i ++) {mx += (x + 1) * y * atk + 8 * atk , y ++;if(mx >= hp) return 1;}for(int i = 1;i <= 5;i ++) {mx += (x + 6) * y * atk + 12 * atk;if(mx >= hp) return 1;}return 0;
}
void dp(int len) {for(int j = 0;j <= len;j ++)for(int k = 0;k <= len;k ++) g[j][k] = -inf;g[0][0] = 0;for(int i = 0;i <= len;i ++) {int mx = 0;for(int j = 0;j <= i;j ++)for(int k = 0;k <= i - j;k ++) f[j][k] = g[j][k] , mx = max(mx , f[j][k]);if(mx >= hp) { cout << i << '\n' << "Tech Otakus Save The World!"; exit(0); }for(int j = 0;j <= i + 1;j ++)for(int k = 0;k <= i + 1 - j;k ++) g[j][k] = -inf;for(int j = 0;j <= i;j ++) {for(int k = 0;k <= i - j;k ++) {if(f[j][k] == -inf) continue;int h = f[j][k] + (j + 1) * k * atk;g[j][k] = max(g[j][k] , h + 5 * k * atk + 12 * atk);g[j + 1][k] = max(g[j + 1][k] , h + 7 * atk);g[j][k + 1] = max(g[j][k + 1] , h + 8 * atk);}}}
}signed main() {cin >> n >> hp >> atk; atk /= 10;if(!hp) { cout << 0 << '\n' << "Tech Otakus Save The World!"; return 0; }if(n <= 300) {for(int j = 0;j <= n;j ++)for(int k = 0;k <= n;k ++) g[j][k] = -inf;g[0][0] = 0;for(int i = 0;i <= n;i ++) {int mx = 0;for(int j = 0;j <= i;j ++)for(int k = 0;k <= i - j;k ++) f[j][k] = g[j][k] , mx = max(mx , f[j][k]);if(mx >= hp) { cout << i << '\n' << "Tech Otakus Save The World!"; return 0; }if(i == n) { cout << mx << '\n' << "MiHoYo Was Destroyed!"; return 0; }for(int j = 0;j <= i + 1;j ++)for(int k = 0;k <= i + 1 - j;k ++) g[j][k] = -inf;for(int j = 0;j <= i;j ++) {for(int k = 0;k <= i - j;k ++) {if(f[j][k] == -inf) continue;int h = f[j][k] + (j + 1) * k * atk;g[j][k] = max(g[j][k] , h + 5 * k * atk + 12 * atk);g[j + 1][k] = max(g[j + 1][k] , h + 7 * atk);g[j][k + 1] = max(g[j][k + 1] , h + 8 * atk);}}}return 0;}else {dp(10);for(int i = 1;i <= n - 10;i ++) {if(i & 1) col[i] = 3;else col[i] = 2;}for(int i = n - 9;i <= n - 5;i ++) col[i] = 3;for(int i = n - 4;i <= n;i ++) col[i] = 1;int x = 0 , y = 0 , mx = 0;for(int i = 1;i <= n;i ++) {int adv = 0;if(col[i] == 1) adv = (x + 6) * y * atk + 12 * atk;else if(col[i] == 2) adv = (x + 1) * y * atk + 7 * atk , x ++;else adv = (x + 1) * y * atk + 8 * atk , y ++;if(mx >= hp - adv) break;mx = mx + adv;if(i == n) { cout << mx << '\n' << "MiHoYo Was Destroyed!"; return 0; }}x = 0 , y = 0 , mx = 0;for(int i = 1;i <= n - 10;i ++) {
//			debug(x , y , mx , check(x , y , mx));int adv = 0;if(i & 1) adv = (x + 1) * y * atk + 8 * atk , y ++;else adv = (x + 1) * y * atk + 7 * atk , x ++;mx += adv;if(check(x , y , mx)) { cout << i + 10 << '\n' << "Tech Otakus Save The World!"; return 0; }
//			debug(i , mx);}
//		cout << "hhh";}return 0;
}

后记

由于作者本人很懒还有点笨,所以这是作者第一篇题解,如果有问题可以私信联系,感谢 ~~

乐一下

搬题时同学把题面改成关于吕布的,

玩过农的都知道,吕布只有 3 个技能,一个一技能附魔(挂 buff),二技能减速,还有大招(血条再厚,一刀带走)

还是写实

4.

P12336 第三心脏

逆天改造

先推柿子

$ \sqrt{a^2 + b^2 + c^2 + d^2} = a \oplus b \oplus c \oplus d $

$ a^2 + b^2 + c^2 + d^2 = (a \oplus b \oplus c \oplus d)^2 \ge d^2 = (d + x)^2 $

拆开得

$ a^2 + b^2 + c^2 + d^2 = (d + x) ^ 2$

\(a^2 + b^2 + c^2 = 2 \times d \times x + x^2\)

\((a \oplus b \oplus c \oplus d)^2 = (d + x) ^ 2\)

\(a \oplus b \oplus c \oplus d = d + x\)

合起来即为

\[\left\{\begin{matrix}a^2 + b^2 + c^2 = 2 \times d \times x + x^2\\ a \oplus b \oplus c \oplus d = d + x \end{matrix}\right.\]

设 x 最高位为 p , 我们让 d 的 \(\le p\) 位,直接可以得到

\[\left\{\begin{matrix}a^2 + b^2 + c^2 = 2 \times d \times x + x^2\\ a \oplus b \oplus c = x \end{matrix}\right.\]

然后我让 x = 1 ,后面的构造可以看出对任意 x 都可以构造

\[\left\{\begin{matrix}a^2 + b^2 + c^2 = 2 \times d + 1\\ a \oplus b \oplus c = 1\\ d \equiv 0 (\bmod 2) \end{matrix}\right.\]

\[\left\{\begin{matrix}\frac{a^2 + b^2 + c^2 - 1}{2} = d\\ a \oplus b \oplus c = 1\\ d \equiv 0 (\bmod 2) \end{matrix}\right.\]

\(b = 2^p + a , c = 2^p + 2^{p + 1} + 1\)

发现成立,

但当 a 为奇数时, \(d \equiv 0 (\bmod 2)\) 不成立

微调一下 \(b = 2^p + a - 1 , c = 2^p + 2^{p + 1}\) 即可

AC

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

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

相关文章

2025年注塑加工行业优质企业最新推荐排行榜:助力需求企业精准筛选可靠合作伙伴

当前,注塑加工行业在现代制造业中地位关键,广泛服务于汽车、电子、家电、医疗等众多领域,行业规模不断扩大,但也面临原材料价格波动、市场竞争激烈、环保标准趋严等挑战。需求企业在选择注塑加工合作伙伴时,常因信…

2025 年工程管理软件平台公司最新推荐榜:聚焦数字化效能,优选靠谱服务商

随着 “数字中国” 战略深化及《“十四五” 建筑业发展规划》推进,建筑行业数字化转型进入加速期,工程管理软件已从大型房企专属工具逐步普及至地产开发、建筑施工、交通基建等多个领域。2025 年建筑业信息化市场规模…

2025 年工程管理软件平台公司最新推荐榜:聚焦数字化效能,优选靠谱服务商

随着 “数字中国” 战略深化及《“十四五” 建筑业发展规划》推进,建筑行业数字化转型进入加速期,工程管理软件已从大型房企专属工具逐步普及至地产开发、建筑施工、交通基建等多个领域。2025 年建筑业信息化市场规模…

被 Excel 格式折腾的那些瞬间---excl格式转换

​做数据岗这些年,光跟 Excel 格式转换打交道就占了不少工作时间:领导要 Word 版的报表摘要,得手动复制粘贴还总乱格式;财务要加密的 PDF 账单,转完发现公式全丢了;批量处理旧版 XLS 文件时,挨个另存为 XLSX 能…

阵列信号处理中的盲源分离算法

盲源分离(Blind Source Separation, BSS)是阵列信号处理中用于从混合观测信号中恢复源信号的重要技术。 盲源分离基础理论 问题模型 阵列信号盲源分离的数学模型为: X(t) = A S(t) + N(t)其中:X(t) = [x₁(t), x₂(…

标准版v9.0破解版及软件安装包

程序名称:金蝶KIS标准版V9.0 发版日期:2011年10月17日 网盘地址:迅雷下载 123网盘下载程序说明:本安装包为官方安装包,由第118楼资源网收集上传分享,内含许可说明,比较经典的一款财务软件,网上资源比较少,…

内外网传文件有哪些痛点?一文读懂高效传输方案是什么样的

内外网传文件,看表面意思是,是内网和外网之间的文件传输,但是实际情况是,有可能内部有多个网络,内部各个子网络之间也会互传文件,而且也会存在和外部伙伴之间的传输。所以,内外网传文件,场景还是很多的。 一、…

win32中的COM接口清单

今天在看到WPF源码里的ByteStream时,发现里面用的是一个COM接口IStream() 记起以前收藏过一个相对完整的COM接口列表,这里分享出来,后面有需要的小伙伴可以到这里来进行查找。NAME:AACMFTEncoder VALUE:93af0c51-22…

内存的堆、内存的栈有什么区别

栈(Stack) 是 “CPU 自动管理的临时工作台”,堆(Heap) 是 “程序员申请的大仓库”;前者 随方法进出自动生死,后者 手动 or GC 清理,速度差一个数量级。 栈(Stack) 是 “CPU 自动管理的临时工作台”,堆(Hea…

2025 年铝板厂家最新推荐榜:覆盖多系列铝板产品,精选优质企业,为采购者提供专业选型参考

当前工业、建筑等领域对铝板的需求持续增长,但市场上铝板品牌繁杂,部分产品存在原材料劣质、工艺落后、售后缺失等问题,导致采购者难以筛选到符合需求的优质产品。不同场景如交通运输对铝板强度和耐腐蚀性要求高,建…

用 AI 批量优化思源笔记排版

主要讲的是思路,可以扩展到其他笔记软件。本文讲解如何用 AI 辅助,优化思源笔记的排版。 主要讲的是思路,可以扩展到其他笔记软件。 ‍ 一、前言 我一直在电脑上做笔记,后来我学到了一个排版技巧:在中文和英文、数…

2025 年连接线线束厂家最新推荐榜:新能源电子 / 机器人电子等多领域优质企业品控、定制能力及合作案例全面盘点

当前,智能短途出行、智能家居、工业自动化等领域飞速发展,连接线线束作为设备 “神经网络”,对设备稳定运行起着关键作用。但行业内存在诸多问题,部分厂商用劣质材料导致线束性能差,缺乏核心技术使定制响应慢,品…

2025 年试验机最新推荐榜单:电子万能材料 / 橡胶拉力 / 塑料拉力 / 环刚度 / 冲击试验机优质厂家精选及科研工业合作参考

在材料检测领域,试验机是保障科研数据精准性与工业质量管控效率的核心设备,然而当前市场供应商资质差异显著,部分厂商存在产品适配性差、技术支撑不足、售后响应迟缓等问题,导致科研机构实验进度受阻、企业生产线检…

2025 年国内卷帘门源头厂家最新推荐排行榜:电动 /pvc/ 钢质 / 自动 / 防火卷帘门优质厂家精选

在工业、物流、医药等领域,卷帘门是保障生产运营安全与效率的关键设备,但其市场现状却让企业采购面临诸多难题。当前市场上源头厂家数量繁杂,部分厂家存在工艺落后、材质劣质、售后缺失等问题,导致企业采购的卷帘门…

2025 年电容厂家最新推荐排行榜:固态 / 高压 / 牛角 / 安规 / CBB / 超级电容领域优质厂家精选

当前,电容作为电子设备核心元件,在消费电子、工业控制、新能源等领域应用愈发广泛,固态、高压、安规等细分品类需求持续攀升。但市场上电容品牌数量繁多,资质与性能差异悬殊,企业采购时难以及时精准筛选出优质合作…

如何让AI实现自动化 —— PlayWright MCP 实测 - 教程

如何让AI实现自动化 —— PlayWright MCP 实测 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

2025 年济南画室最新推荐榜单:聚焦小班教学与全封闭管理,权威解析优质画室品牌榜山东画室推荐

随着济南艺考培训市场的持续升温,各类画室数量激增,市场乱象也随之显现 —— 部分机构缺乏正规教学资质、师资水平参差不齐,有的采用百人以上大班授课导致教学质量难以保障,还有的管理松散无法为学生提供稳定学习环…

uni-app x封装request,统一API接口请求

一、概述 uni-app x 提供了 uni.request() 方法。uni.request({url: https://api.example.com,method: GET })在实际项目开发中,直接使用 uni.request 会带来诸多问题,例如:重复代码多(如每次都要写 baseURL) 错误…

2025年无锡黄金回收商家电话最新权威推荐榜:专业鉴定与高价回收口碑之选,黄金回收公司推荐

行业背景与市场现状黄金回收行业作为贵金属循环经济的重要环节,近年来呈现出蓬勃发展的态势。随着国际金价持续波动和消费者对资产流动性的需求增加,黄金回收市场迎来了新的发展机遇。据统计,2024年我国黄金回收量较…

2025年黄金回收品牌最新权威推荐榜:专业鉴定与高价回收口碑之选,正规资质黄金回收厂家精选指南

2025年黄金回收品牌最新权威推荐榜:专业鉴定与高价回收口碑之选,正规资质黄金回收厂家精选指南随着全球经济形势的变化和贵金属市场的波动,黄金回收行业正迎来前所未有的发展机遇。2024年至2025年间,中国黄金回收市…