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

OI 笑传 #36

ylx 依旧在自言自语的讲课。感觉 SDUT 里好吃的地方都去过了。

今天是 bct NOIP Day 6,赛时 \(100+10+20+10=140\),rk 27。

T4 不会手写 bitset 被区分了,于是学了学。

sheep 说 T2 是典完了的连通性容斥,我咋不知道啊。

评价是 ok 场。其实 T2 原本是 T1 来着,ylx 被压力的才加的题。

T1

把要记的都扔进状态里 DP 即可,转移时还要容斥一下。

code

Show me the code
#include<bits/stdc++.h>
using namespace std;
typedef long long i64;
typedef unsigned long long u64;
typedef __int128 i128;
#define ls p*2
#define rs p*2+1
const int N=400;
const int mod=998244353;
int dp[N][N][N];
int main(){freopen("qwq.in","r",stdin);freopen("qwq.out","w",stdout);string a,b,c;cin>>a>>b>>c;int len=c.size();int l1=a.size();int l2=b.size();a=' '+a;b=' '+b;c=' '+c;for(int i=0;i<=l1;i++)for(int j=0;j<=l2;j++)dp[i][j][0]=1;for(int i=1;i<=l1;i++)for(int j=1;j<=l2;j++){for(int p=1;p<=min(min(i,j),len);p++){dp[i][j][p]=(0ll+dp[i-1][j][p]+dp[i][j-1][p]-dp[i-1][j-1][p]+mod)%mod;if(c[p]=='<'&&a[i]<b[j]){dp[i][j][p]=(0ll+dp[i][j][p]+dp[i-1][j-1][p-1])%mod;}	if(c[p]=='>'&&a[i]>b[j]){dp[i][j][p]=(0ll+dp[i][j][p]+dp[i-1][j-1][p-1])%mod;}}}cout<<dp[l1][l2][len];return 0;
}

T2

不想在赛前赤这种东西。放了。

T3

DP 牛牛题。

考虑为什么花费要定义为 距离乘上价值 状物,很重要的观察是当重量 \(k\) 一定时,如果选的东西的距离都至少是 \(d_i\),那么选出来的价值和不超过 \(\left \lfloor \dfrac{k}{d_i}\right \rfloor\)

我们又知道背包的一种常见变体就是如果物品价值很小花费很大,我们会把价值作为状态来 DP,结果是达到这个价值用的最小代价。

于是这启发我们分 \(d_i\) 的大小吧,恩就是根号分治。

阈值 \(B\) 表示分的大小,\(d_i\le B\) 那就暴力 \(O(k)\) 更新以代价为状态的 DP 数组。\(d_i > B\) 那就从 \(\left \lfloor \dfrac{k}{d_i}\right \rfloor\)\(v_i\) 的更新以价值为状态的 DP 数组。

后者有时间复杂度上界就是调和级数,\(O(k\log k)\),前者的时间复杂度显然是 \(O(kB)\) 的。

对于查询,首先显然要时间倒流,因为背包好加不好删。

然后枚举我们想在 \(d_i>B\) 这一块拿多少价值,再看看剩余的代价能在 \(d_i\le B\) 那里拿多少价值,合起来去最大即可。

能取的价值的上界显然是 \(\left \lfloor \dfrac{k}{B}\right \rfloor\),于是查询的时间复杂度就是 \(q\left \lfloor \dfrac{k}{B}\right \rfloor\)

再考虑修改,\(d_i > B\) 不管反正有个上界,\(d_i\le B\) 最多就 \(B\) 个,时间复杂度是 \(O(kB)\)

于是这东西的时间复杂度是 \(O(kB + \frac{kq}{B} + k \log k)\) 的,均值一下取 \(B=\sqrt{q}\) 即可。

感谢 sheep 一眼了我代码的 bug。感觉比 T2 简单。

code

Show me the code
#define rd read()
#define mkp make_pair
#define ls p<<1
#define rs p<<1|1
#define rep(i,a,b) for( int i=(a); i<=(b); ++i)
#define per(i,a,b) for( int i=(a); i>=(b); --i)
#include<bits/stdc++.h>
using namespace std;
typedef long long i64;
typedef unsigned long long u64;
typedef unsigned int u32;
typedef __int128 i128;
i64 read(){i64 x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;
}
const int N=2e6+612312;
i64 d[N];i64 v[N];i64 dpw[N];i64 dpv[N];i64 ans[N];
struct que{i64 op;i64 v;i64 qid;
}qm[N];
bitset<N> ext;
int main(){ios::sync_with_stdio(0);cin.tie(0);int n,m,k;cin>>n>>m>>k;for(int i=1;i<=n;i++){cin>>d[i]>>v[i];ext[i]=1;}int bd=sqrt(m)+1;cerr<<bd<<'\n';int qc=0;for(int i=1;i<=m;i++){int op;cin>>op;if(op==1){int vk;cin>>vk;ext[vk]=0;qm[i].op=op;qm[i].v=vk;}if(op==2){int q;cin>>q;qc++;qm[i].op=op;qm[i].qid=qc;qm[i].v=q;}}memset(dpv,0x7f,sizeof dpv);dpv[0]=dpw[0]=0;int d1=0;for(int i=n;i>=1;i--){if(ext[i]==0)continue;if(d[i]>bd){for(int j=k/d[i];j>=v[i];j--){dpv[j]=min(dpv[j],dpv[j-v[i]]+v[i]*d[i]);}d1=k/d[i];}else{for(int j=k;j>=d[i]*v[i];j--){dpw[j]=max(dpw[j],dpw[j-d[i]*v[i]]+v[i]);}}}for(int i=m;i>=1;i--){int op=qm[i].op;if(op==1){int vk=qm[i].v;i64 cst=v[vk]*d[vk];if(d[vk]>bd){d1=max(0ll+k/d[vk],0ll+d1);for(int j=d1;j>=v[vk];j--){dpv[j]=min(dpv[j],dpv[j-v[vk]]+cst);}}else{for(int j=k;j>=cst;j--){dpw[j]=max(dpw[j],dpw[j-cst]+v[vk]);} }}if(op==2){i64 ks=qm[i].v;i64 anss=0;for(int j=0;j<=k/bd;j++){i64 req=ks-dpv[j];if(req<0)continue;if(req==0){anss=max(anss,0ll+j);}else anss=max(anss,dpw[req]+j);}ans[qm[i].qid]=anss;}}  for(int i=1;i<=qc;i++){cout<<ans[i]<<'\n';}return 0;
}

T4

学了下手写 Bitset,过了 30pts 就跑路了。

正解是大分块,但是我们的常熟大蛇 sheep \(O(nq)\) 过了后两个 subtask。

http://www.jsqmd.com/news/50952/

相关文章:

  • 2025.11.25总结
  • Go 打造图像识别引擎:实现验证码文本解析功能
  • Coze相关问题
  • 妥协技术方案和风险累加
  • 目标跟踪(BOT-SORT)yolo默认的跟踪算法 - MKT
  • Day2 Scrum冲刺博客
  • 第36天(中等题 数据结构)
  • Save Time Money: KEYDIY KD NB22-4 Universal 4-Button Remote (5pcs/lot) for Euro/American Cars
  • 翻转课堂 1st
  • 二叉树 节点的个数关系
  • 整合 MyBatis 代码生成器插件
  • java---Idea
  • java---基础
  • 内存马研判
  • 实用指南:__工艺数据管理的范式转变:金仓数据库替代MongoDB实操实践__
  • KEYDIY KD NB27-3 3-Button Universal Flip Remote - 5pcs for Audi Universal Fit
  • NOIP 集训 day3 图论1
  • 计算机网络—TCP和UDP
  • Universal 3-Button Flip Remote Key for Hyundai: KEYDIY KD NB25-3 (5pcs/lot)
  • 接口自动化平台用例执行引擎 — ApiTestEngine
  • NOIp 知识点复习
  • Redis:高性能NoSQL数据库实战指南 - 教程
  • 2025年口碑好的轮胎品牌哪家好:十大消费者信赖品牌揭秘
  • Topic 2
  • AcWing 860:染色法判定二分图 ← 并查集
  • 回调函数20251125
  • 类模板的实现
  • rime(小狼毫)+雾凇+皮肤+万象大模型+个人词库补充
  • 2025年中国前五大轮胎品牌:专业测评与选购指南
  • lru_cache装饰器的缓存清除机制原理