[题解]【MX-S10】梦熊 NOIP 2025 模拟赛 2 FeOI Round 4 T1~T2

news/2025/11/9 14:33:37/文章来源:https://www.cnblogs.com/Sinktank/p/19202298

T1. P14460 寻雾启示

考虑 DP。令 \(f_i\) 为到达位置 \(i\) 的最短时间。

转移时,考虑枚举最后一个折返点 \(j\)。即:

  • 先从 \(0\) 经过一系列步骤到 \(j\)
  • \(j\) 折返到 \(0\),一直等待到铁锭足够。
  • 先跑步到 \(j\),再铺路到 \(i\)

\(j=0\) 即为不折返。

则有转移:

\[f_i=\min_{j=0}^{i-1} \max(ik,f_j+jt_2)+jt_2+(i-j)t_1 \]

\(O(n^2)\) DP 可以获得 \(90\rm pts\),出题人好温柔。

考虑进一步优化。发现把 \(j\) 相关项丢到 \(\max\) 里面,其左右式均为关于 \(j\) 的一次函数。

所以可能的转移点只可能在 \(0\)\(i-1\)、以及交点左右侧的位置取到。

求交点能 \(O(1)\) 做。代码是 \(O(\log m)\) 二分求的,因为方便点。

时间复杂度 \(O(m)\)\(O(m\log m)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define cal(x) (max(i*k,f[x]+(x)*t2)+(x)*t2+(i-(x))*t1)
using namespace std;
const int M=1e5+5,inf=1e15;
int t,m,k,t1,t2,f[M];//t1搭路 t2跑步
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>t;while(t--){cin>>m>>k>>t1>>t2;for(int i=1;i<=m;i++){int l=0,r=i-1;while(l<r){int mid=(l+r)>>1;if(f[mid]+mid*t2>=i*k) r=mid;else l=mid+1;}f[i]=min({cal(0),cal(l),cal(i-1)});if(l-1>=0) f[i]=min(f[i],cal(l-1));}for(int i=1;i<=m;i++) cout<<f[i]<<" ";cout<<"\n";}return 0;
}

T2. P14461 青年晚报

赛时无脑找规律的做法,没写证明,可以看洛谷题解区。

考虑贡献是可加的,一个很常见的技巧就是分别考虑 \(F,G\) 中的每一位对答案的贡献。

我们先考虑 \(n\) 为偶数的情况,此时 \(F_0\) 只能影响到 \(F_n\)\(G_0\) 只能影响到 \(G_n\)

\(F\) 举例,\(G\) 完全相同。打表可以发现,初始状态的一个 \(1\) 对之后的贡献如下(奇数行省去了,因为全为 \(0\)):

找一找规律:

最后一行的组合数下标恒为 \(\dfrac{n}{2}\),可以 \(O(m)\) 地递推,而不需要 \(O(n)\)(赛时因为没想到这个丢了 \(8\rm{pts}\))。

如果 \(n\) 是奇数,就暴力再递推一轮即可。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int M=5005,P=1e9+7,speN=1e7+2;
int n,m,f[M],g[M],ff[M],gg[M],tf[M],tg[M],t[M];
int fc[speN],iv[speN];
inline int qp(int x,int n){int a=1;while(n){if(n&1) a=a*x%P;x=x*x%P,n>>=1;}return a;
}
inline int C(int n,int m){return fc[n]*iv[m]%P*iv[n-m]%P;}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);fc[0]=1;for(int i=1;i<speN;i++) fc[i]=fc[i-1]*i%P;iv[speN-1]=qp(fc[speN-1],P-2);for(int i=speN-2;~i;i--) iv[i]=iv[i+1]*(i+1)%P;cin>>n>>m;for(int i=0;i<=m;i++) cin>>f[i];for(int i=0;i<=m;i++) cin>>g[i];for(int i=0;i<=m;i++){if(!f[i]) continue;for(int j=i,r=0,fac=f[i]%P;j>=0;j-=2,r+=2){if(r>n) break;(ff[j]+=fac*C(n/2,(i-j)/2))%=P;(fac*=-(j-1)*j)%=P;}}for(int i=0;i<=m;i++){if(!g[i]) continue;for(int j=i,r=0,fac=g[i]%P;j>=0;j-=2,r+=2){if(r>n) break;(gg[j]+=fac*C(n/2,(i-j)/2))%=P;(fac*=-(j-1)*j)%=P;}}if(n&1){//再模拟一轮 for(int i=0;i<m;i++) tf[i]=(ff[i+1]*(i+1))%P,tg[i]=(gg[i+1]*(i+1))%P;for(int i=0;i<=m;i++) t[i]=(gg[i]+tg[i])%P,gg[i]=(ff[i]-tf[i])%P;for(int i=0;i<=m;i++) ff[i]=t[i];}for(int i=0;i<=m;i++) cout<<(ff[i]%P+P)%P<<" ";cout<<"\n";for(int i=0;i<=m;i++) cout<<(gg[i]%P+P)%P<<" ";return 0;
}

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

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

相关文章

小聊一下 带圈的数字,以及罕用字的显示、字体文件的分割

以前我在博客《文本文件中一些特殊的字符用法》中提到过,unicode中有一类字符用于在前一字符的右上角的显示字母或数字,如 也有一类在前一字符的右下角显示字母或数字。 ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁰ ⁺ ⁻ ⁽ ⁾ ⁿ ⁼ ₐ…

CSP挂分记

本文同步发布至洛谷文章。 上午普及组,前两道题差不多 \(30\) 分钟就切掉了,但是第三题就卡住了,刚开始想弄枚举或贪心,发现写不出来,于是考虑动态规划。差不多半个小时左右,就想出正解了。而且赛后看题解,似乎…

实用指南:Agent 的感知-决策-行动循环实现

实用指南:Agent 的感知-决策-行动循环实现pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

深入解析:51单片机基础-动态数码管显示

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

Ubuntu 22.04 的镜像源列表

Ubuntu 22.04 的镜像源列表#清华 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiversedeb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted unive…

关于梅特勒-托利多 称重传感器检查

模拟传感器检查: 测量方式:万用表:红色->传感器:+SIG 白色 万用表:黑色->传感器:-SIG 红色判断依据: 正常值在:2-5mV 若其中一只超出范围或差距过大,则判断损坏

Window 11 安装wsl

安装WSL 这个参考链接,参考了部分内容,记录亲测的安装步骤,注意使用代理,不然在执行powershell中执行wsl --install时会报错,提示没有服务。 1、开发指定服务 设置-控制面板-程序和功能-启用或关闭Windows功能,启…

深入解析:达梦数据库TDE透明加密解决方案:构建高安全数据存储体系

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

现代Web API应用与优化建议

1. ResizeObserver:像素级「监听」元素尺寸 痛点:window.resize 只能监听视口,图表容器被 flex 布局偷偷撑开你却拿不到回调。 一行代码: new ResizeObserver(entries => myChart.resize()).observe(document.q…

Linux 云计算核心技术:原理、组件与 K8s 实战部署 - 详解

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

局域网---传输文件资料信息

我们在进行文件传输的过程中,通常都是使用微信传输,但是微信传输会被自动压缩,特别是在传输视频的时候。而且微信传输文件,如果不注意清理,就会导致存储的文件越来越多,内存占据越来越多。 推荐一个局域网的传输…

ICPC2023南京个人题解

I. Counter 题意:给定一个初始值为零的计数器,每次操作可以使值+1或者变为0,再给定 \(m\) 个特定时间 \(a_i\) 的对应计数器的值 \(b_i\) ,问有没有可能的长度为 \(n\) 的操作序列满足所有条件。 限制条件:\(1\le…

从C++到wasm,并在JavaScript中调用

我将为你提供一个完整的从 C++ 编译到 WebAssembly 并在 JavaScript 中调用的指南。 环境准备 1. 安装 Emscripten # 克隆 emsdk 仓库 git clone https://github.com/emscripten-core/emsdk.git cd emsdk# 安装最新版本…

图书馆管理系统初步设计

图书馆管理系统开发记录 1. 我使用了什么AI工具辅助选题 在项目初期,我使用了deepseek和豆包等AI工具辅助选题。通过与这些工具交流,了解了当前常见的Java课程设计选题方向,分析了不同选题的可行性和复杂度,最终结…

Delphi 修改单元名称后,编译报错找不到修改前的单元

原因是: 被修改的单元的名称,没有同步到早前引用了该单元的单元中. 做个比喻就是 张三改名为李四,以后大家也都叫他李四,但是在他没改名之前,注册在某单元里面的名字还是叫张三. 解决方案是: 菜单 - 搜索 - 在文件中查…

详细介绍:计算某字符出现次数

详细介绍:计算某字符出现次数pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

3dgs Scene详解 - 详解

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

英语_阅读_30 years ago_待读

It was a few years ago. 那是几年前的事了。 A friend had sent me a restaurant gift card for Christmas and I had picked a sunny Sunday afternoon to use it. 一个朋友送了我一张餐厅礼品卡做圣诞礼物,我选了一…

2026 NOI 做题记录(九)

推荐阅读:A、F、G、I、PContest Link \(\text{By DaiRuiChen007}\)*A. [P11984] 占卜 3 (8.5) Problem Link 首先朴素的想法就是用 \(a\) 个 \(0\) 和 \(b\) 个 \(1\) 表示 \(\binom{a}{a+b}\) 级别的信息。 有几个问…

英语_阅读_When youre bored_待读

When youre bored, what will you do first? 当你感到无聊时,你会先做什么? If youre like many, the answer is quite simple: You reach for your phone. 如果你和许多人一样,答案很简单:你会拿起手机。 Five m…