尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【做题记录】多校-dp

【做题记录】多校-dp
📅 发布时间:2026/6/20 10:41:33

A. Multitest Generator

考虑一个长为 \(m(m\ge 2)\) 的序列 \(b\),我们显然可以令 \(b_1=1,b_2=m-2\) 来使它变成 multitest。于是我们只需要判断能否使用 \(0\) 次或 \(1\) 次操作使其变成 multitest。

首先考虑 \(0\) 次,也就是它本身就是个 multitest。设 \(f_i\) 表示 \(i\sim n\) 这段后缀中有多少个 test,若不合法则 \(f_i=0\),可以 DP 出来。于是 \(i\) 的答案为 \(0\) 的充要条件即为 \(a_i=f_{i+1}\)。

考虑 \(1\) 次。首先如果 \(f_{i+1}\ne0\),那么我们可以直接修改 \(a_i\) 来满足要求。而如果 \(f_{i+1}=0\),我们则希望通过一次修改将 \(i+1\sim n\) 这段后缀变成 \(a_i\) 个 test。考虑如果能变成 \(x\) 个 test,则一定可以变成 \(x-1\) 个 test,于是设 \(g_i\) 表示通过一次修改能使 \(i\sim n\) 最多变成多少个 test,则有:

\[g_i=\max(g_{i+a_i+1}+1,\max_{j=i+1}^{n}\{f_j\}+1) \]

也就是分别考虑是否修改 \(a_i\)。于是若 \(g_{i+1}\ge a_i\) 那么 \(i\) 的答案为 \(1\),否则答案为 \(2\)。

Code
#include<bits/stdc++.h>
#define ll long long
#define il inline
using namespace std;
namespace asbt{
const int maxn=3e5+5;
int T,n,a[maxn],f[maxn],hp[maxn],g[maxn];
il void solve(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}f[n+1]=hp[n+1]=g[n+1]=0;for(int i=n;i;i--){f[i]=i+a[i]==n?1:i+a[i]>n||!f[i+a[i]+1]?0:f[i+a[i]+1]+1;hp[i]=max(hp[i+1],f[i]);g[i]=max(i+a[i]>n?0:g[i+a[i]+1]+1,hp[i+1]+1);}for(int i=1;i<n;i++){cout<<(a[i]==f[i+1]?0:f[i+1]||g[i+1]>=a[i]?1:2)<<' ';}cout<<'\n';
}
int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>T;while(T--){solve();}return 0;
}
}
int main(){return asbt::main();}

B. Bitwise Slides

记 \(s_i\) 为前缀异或和数组。则对于每一时刻,都有三个数的异或和为 \(s_i\)。又因为有两个相等,所以必然有一个值为 \(s_i\)。

设 \(dp_{i,j}\) 表示进行完第 \(i\) 次操作后那两个相等的数值为 \(j\) 的方案数。于是有转移:

  • \(j=s_{i-1}\),\(dp_{i,j}\gets 3dp_{i-1,j}\)。

  • \(j=s_i\),\(\begin{cases}dp_{i,j}\gets dp_{i-1,j}\\dp_{i,s_{i-1}}\gets2dp_{i,j}\end{cases}\)。

  • \(else\),\(dp_{i,j}\gets dp_{i-1,j}\)。

发现每次 DP 值改变的只有 \(dp_{i,s_{i-1}}\)。用 map 维护即可。

Code
#include<bits/stdc++.h>
#define ll long long
#define il inline
#define pii pair<int,int>
#define fir first
#define sec second
using namespace std;
namespace asbt{
const int maxn=2e5+5,mod=1e9+7;
il int pls(int x,int y){return x+y<mod?x+y:x+y-mod;
}
il void add(int &x,int y){x=pls(x,y);
}
il int mns(int x,int y){return x<y?x-y+mod:x-y;
}
il void sub(int &x,int y){x=mns(x,y);
}
int T,n,a[maxn];
map<int,int> dp;
int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>T;while(T--){cin>>n;dp.clear();dp[0]=1;for(int i=1,x;i<=n;i++){cin>>x;a[i]=a[i-1]^x;dp[a[i-1]]=(dp[a[i-1]]*3ll+dp[a[i]]*2ll)%mod;}int ans=0;for(pii i:dp){add(ans,i.sec);}cout<<ans<<'\n';}return 0;
}
}
int main(){return asbt::main();}

相关新闻

  • CSP-S 题解反思考场游记
  • 2025 年 11 月高压清洗机厂家推荐排行榜,超高压清洗机组,超高压水清洗设备,超高压清洗装置,工业超高压清洗设备公司精选
  • 2025 年 11 月不干胶轮转机厂家推荐排行榜,商标不干胶轮转机,高速轮转印刷设备,高效稳定生产解决方案

最新新闻

  • ncmdumpGUI:3分钟解锁网易云音乐ncm格式的Windows图形化转换方案
  • 终极Windows防休眠解决方案:NoSleep高效保持系统活跃指南
  • 免费AI图像修复神器:让模糊图片秒变高清的终极指南
  • AtCoder - abc463_e的题解
  • M4 Mac Mini 16GB内存部署OpenClaw+oMLX实战指南
  • CircuitJS1 Desktop Mod:零基础也能轻松上手的免费电路仿真神器

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号