当前位置: 首页 > news >正文

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

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.gsyq.cn/news/44586.html

相关文章:

  • Window 11 安装wsl
  • 深入解析:达梦数据库TDE透明加密解决方案:构建高安全数据存储体系
  • 现代Web API应用与优化建议
  • 3dgs Scene详解 - 详解
  • 教学视频(1)
  • 游戏编程模式-享元模式(Flyweight) - 指南
  • 002 vue3-admin项目的目录及文件说明之package.json文件
  • 2025年知名的中空板厂家推荐及选购指南
  • 英语_阅读_Comic books_待读
  • 2025年质量好的发热管缩管机厂家选购指南与推荐
  • 2025年热门的防尘式工业型测力称重变送器厂家最新推荐权威榜
  • C++网络编程(十)epoll模型与select的区别 - 实践
  • 2025年质量好的密闭式压滤机高评价厂家推荐榜
  • CentOS 7 环境下 RabbitMQ 的部署与 Web 管理界面基本使用指南 - 详解
  • 2025年比较好的自动化篷布设备行业内口碑厂家排行榜
  • 2025年口碑好的胶辊厂家最新热销排行
  • 2025年口碑好的MMA彩色防滑路面热门厂家推荐榜单
  • 2025年比较好的全纤维台车炉最新TOP厂家排名
  • 2025年质量好的智能无主灯酒店民宿用户好评厂家排行
  • 002 vue3-admin项目的目录及文件说明之package-lock.json文件
  • 2025年比较好的地磅厂家实力及用户口碑排行榜
  • 2025年靠谱的防裂护手霜用户口碑最好的厂家榜
  • 2025年比较好的酒店壁炉TOP品牌厂家排行榜
  • 2025年热门的电动丝杆升降机最新TOP厂家排名
  • CF2164F2 奇怪做法
  • 2025年靠谱的纸箱码垛机TOP品牌厂家排行榜
  • 目前成都低压电缆工厂推荐榜top10
  • 2025年质量好的进口品牌平面铰链行业内知名厂家排行榜
  • 2025年热门的衣柜抽屉滑轨厂家实力及用户口碑排行榜
  • 2025年知名的反弹缓冲滑轨行业内知名厂家排行榜