news 2026/6/26 5:02:44

洛谷-P16434 [APIO 2026 中国赛区] 蛋糕 题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷-P16434 [APIO 2026 中国赛区] 蛋糕 题解

洛谷-P16434 [APIO 2026 中国赛区] 蛋糕 题解

交互题好玩!

看到各测试点限制各不相同,考虑数据点分治。

约定记号

  • f(S)=∑i∈Saif(S)=∑i∈S​ai​。

形式化题意

你需要猜出评测机里一个 [1,W][1,W] 中的正整数 dd。为此你需要构造一个长度 ≤N≤N,值域 [1,W+200][1,W+200] 的正整数序列。评测机会把该序列排序并把需要猜的数插入到正确位置。

设排序后序列为 {ai}i=0m{ai​}i=0m​。接下来你最多可以询问 KK 次。每次询问需要给出两个下标集合 S1,S2S1​,S2​,满足 S1∩S2=∅S1​∩S2​=∅ 且 S1,S2⊆{0,1,…,m}S1​,S2​⊆{0,1,…,m}。评测机会返回 f(S1)f(S1​) 和 f(S2)f(S2​) 的大小关系。请猜出评测机中的数。

Subtask1

传 (1,2,3,…,W)(1,2,3,…,W)。暴力枚举到第一个满足 ai=ai+1ai​=ai+1​ 的位置,则必有 d=i+1d=i+1。

Subtask2

传序列 (1,2,3)(1,2,3)。插入 dd 排序后,必然有 a0=1,a3=3a0​=1,a3​=3。我们只需比较 a0+a3=4a0​+a3​=4 与 a1+a2a1​+a2​ 的大小。具体地:

  • 若 d=1d=1:{a}=(1,1,2,3){a}=(1,1,2,3),a0+a3>a1+a2a0​+a3​>a1​+a2​
  • 若 d=2d=2:{a}=(1,2,2,3){a}=(1,2,2,3),a0+a3=a1+a2a0​+a3​=a1​+a2​
  • 若 d=3d=3:{a}=(1,2,3,3){a}=(1,2,3,3),a0+a3<a1+a2a0​+a3​<a1​+a2​

Subtask3

注意到 K=⌈log⁡2W⌉K=⌈log2​W⌉,考虑二进制拆分,一次询问确定一位。

我们传 (1,2,22,23,…,229)(1,2,22,23,…,229)。该序列满足 ∑k=0i−1ak<ai∑k=0i−1​ak​<ai​ 的性质。观潮到插入 dd 之后,在 dd 及其右侧该性质会被破坏。

那么我们从右往左找到最大的满足以上性质的 ii。那么 dd 的第 ii 位一定是 11。然后依次尝试加上 2i−1,2i−2,…,12i−1,2i−2,…,1 即可确定剩余位。恰好询问 3030 次。

Subtask4

如果直接套用 Subtask 3 的做法可以获得 1111 分。由于 2K<W2K<W,该做法没有前途。

注意到 K=⌈log⁡3W⌉K=⌈log3​W⌉,而 37=2187<W+20037=2187<W+200。这强烈暗示我们采用三分做法,需要一次询问将搜索范围缩小至 1/31/3。

发现 NN 的限制非常宽松。构造序列 (1,2,3,…,37)(1,2,3,…,37)。注意到,该序列满足性质 ai+aj=ai+k+aj−kai​+aj​=ai+k​+aj−k​。

维护 dd 所在的下标区间 [l,r][l,r],初始时 l=0,r=2187l=0,r=2187。

每次取区间三等分点m1=l+(r−l)/3,m2=r−(r−l)/3m1​=l+(r−l)/3,m2​=r−(r−l)/3,查询 S1={m1,m2},S2={l,r}S1​={m1​,m2​},S2​={l,r}。

  1. f(S1)<f(S2)f(S1​)<f(S2​):dd 插在 [l,m1][l,m1​] 段中。
  2. f(S1)=f(S2)f(S1​)=f(S2​):原性质仍然成立,说明 dd 插在 [m1,m2][m1​,m2​] 段中。
  3. f(S1)>f(S2)f(S1​)>f(S2​):dd 插在 [m2,r][m2​,r] 段中。

然后不断三分即可,注意边界和细节问题。

Code

#include "cake.h"
#include <vector>
#include <numeric>
#define rep(i,a,b) for(int i(a);i<b;++i)
#define per(i,a,b) for(int i(a);i>b;--i)
#define rept(i,a,b) for(int i(a);i<=b;++i)
#define pert(i,a,b) for(int i(a);i>=b;--i)
#define eb emplace_back
using namespace std;
vector<int> bake_cakes(int N,int W,int K){
if(K==1) return {1,2,3};
if(K==100){
vector<int> res(100);
iota(res.begin(),res.end(),1);
return res;
}
if(K==30){
vector<int> res(30);
rep(i,0,30) res[i]=1<<i;
return res;
}
vector<int> res;
rept(i,1,2187) res.eb(i);
return res;
}
int find_tastiness(int m,int W,int K){
if(K==1){
int k=compare_tastiness({0,3},{1,2});
return k==-1?3:(k?1:2);
}
if(K==100){
rept(i,0,99){
if(!compare_tastiness({i},{i+1})) return i+1;
}
return 0;
}
if(K==30){
int ans=0,h=-1;
pert(i,29,1){
vector<int> t(i);
iota(t.begin(),t.end(),0);
if(compare_tastiness(t,{i})==-1){
h=i;
break;
}
}
if(h==-1) return 1;
ans|=1<<h;
pert(i,h-1,0){
vector<int> t;
rep(i,0,30) if(ans>>i&1) t.eb(i);
t.eb(i);
int k=compare_tastiness(t,{h+1});
if(!k) return ans|1<<i;
if(k==-1) ans|=1<<i;
}
return ans;
}
int l=0,r=2187,cur=729;
while(l+1<r){
int k=compare_tastiness({l+cur,r-cur},{l,r});
if(k==-1) r=l+cur;
else if(!k) l+=cur,r-=cur;
else l=r-cur;
cur/=3;
}
return r;
}

分类: 题解

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 4:58:57

当AI Agent开始“调用“知识,你的内容中台经得起追溯吗?

一、AI Agent的"知识焦虑"6月23日&#xff0c;网易智企发布CoreAgent V1.9&#xff0c;核心亮点之一是知识库检索全链路可追踪——每一次检索的输入输出、耗时分布、召回分块都能可视化呈现&#xff0c;精准定位"答非所问"的问题根源。同一天&#xff0c;火…

作者头像 李华
网站建设 2026/6/26 4:57:55

A2A 协议落地 —— 从“前瞻设计“到“标准化接入“

讨论 MCP 时&#xff0c;我们用"标准协议替代手写胶水"解决工具暴露问题。但那是"纵向"的——Agent 怎么调用工具。本文讨论"横向"的问题&#xff1a;当有多个 Agent 要相互协作&#xff0c;或者外部系统想把 Shop-Agent 当成一个黑盒能力直接调…

作者头像 李华
网站建设 2026/6/26 4:56:21

华为OD机试新系统真题【设计能量管理系统】

设计能量管理系统(C/C++/Py/Java/Js/Go)题解 华为OD机试新系统真题 华为OD上机考试新系统真题 6月24号 100分题型 华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录|机考题库 + 算法考点详解 题目内容 设计一个能量管理系统,用于管理多种能源的生产、消耗…

作者头像 李华
网站建设 2026/6/26 4:54:28

问题解决策略动态规划训练2

ai写的。问题 A: 3.1.2 Score Inflation 总分题目描述学生在我们 USACO 的竞赛中的得分越多我们越高兴。我们试着设计我们的竞赛以便人们能尽可能的多得分&#xff0c;这需要你的帮助。我们可以从几个种类中选取竞赛的题目&#xff0c;这里的一个“种类”是指一个竞赛题目的集合…

作者头像 李华
网站建设 2026/6/26 4:54:17

Python实战AES-CBC数据加密:原理、实现与安全实践

1. 项目概述&#xff1a;为什么选择AES-CBC模式进行数据加密&#xff1f;在数据安全领域&#xff0c;加密是保护信息机密性的基石。作为一名开发者&#xff0c;我经常需要在项目中处理敏感数据&#xff0c;比如用户的个人身份信息、配置凭证或者应用内的通信内容。直接存储或传…

作者头像 李华