11.15 洛谷 NOIP 模拟赛

news/2025/11/17 16:07:04/文章来源:https://www.cnblogs.com/CharlieCai/p/19233018

T1

题面

P14507 缺零分治 mexdnc

题目描述

给定一个正整数 \(n\)\(n\) 个二元组 \((a_i,b_i)\),表示现在有 \(b_i\) 个大小为 \(a_i\) 的数。

定义一个可重集合的 \(\operatorname{mex}\) 为最小的没有在这个集合中出现的自然数。

你需要将这 \(\sum_{i=1}^{n} b_i\) 个数划分成 \(k(k\ge 1)\) 个可重集合,使得这 \(k\) 个可重集合的 \(\operatorname{mex}\) 之和恰好\(m\),并最小化这个 \(k\)

现在有 \(q\) 组询问,对于每一组询问给定一个 \(m\),你需要输出最小的 \(k\),如果无解则输出 \(-1\)

输入格式

本题包含多组测试数据。

输入的第一行包含一个整数 \(T\),表示测试数据的组数。

接下来包含 \(T\) 组数据,每组数据的格式如下:

  • 第一行包含两个整数 \(n,q\),表示有 \(n\) 个二元组并且存在 \(q\) 次询问。

  • 对于接下来的 \(n\) 行每行输入两个整数,表示二元组 \((a_i,b_i)\)

  • 对于接下来的 \(q\) 行每行输入一个整数 \(m\) 表示一次询问。

输出格式

对于每组测试数据输出 \(q\) 行,每行包含一个整数,表示对应的答案。

输入输出样例 #1

输入 #1

1
4 5
0 3
1 4
2 1
4 1
0
3
4
7
8

输出 #1

-1
1
2
3
-1

说明/提示

【样例 1 解释】

对于 \(m=0\)\(m=8\) 都可以证明不存在划分方案使得有解。

对于 \(m=3\),可以将所有数划分为一个集合 \(S=\{0,0,0,1,1,1,1,2,4\}\),这个集合的 \(\operatorname{mex}\)\(3\)

对于 \(m=4\),可以将所有数划分为两个集合 \(S_1=\{0,0,1,1,1,1,2\}\)\(S_2=\{0,4\}\),这两个集合的 \(\operatorname{mex}\) 之和为 \(3+1=4\)

对于 \(m=7\),可以将所有数划分为三个集合 \(S_1=\{0,1,2,4\},S_2=\{0,1\},S_3=\{0,1,1\}\),这三个集合的 \(\operatorname{mex}\) 之和为 \(3+2+2=7\)

【样例 2 解释】

我们提供了一组大样例,该样例共有 \(10\) 组测试数据,其中第 \(i(1\leq i\leq 10)\) 组测试数据满足数据范围中描述的测试点 \(2i-1\)的限制。

数据范围
对于所有的数据,满足:

  • \(1\le T\le 10\)
  • \(1\le n,q\le 10^5,0\le a_i\le 10^9,a_{i-1}<a_i,1\le b_i\le 10^9,0\le m\le 10^{18}\)

::cute-table{tuack}

测试点编号 \(n,q\leq\) \(m \leq\) 特殊性质
\(1\sim 2\) \(10\) \(10\) AB
\(3\sim 4\) \(1000\) \(1000\) B
\(5\sim 8\) \(1000\) \(10^4\)
\(9\sim 12\) \(10^5\) \(10^{18}\) C
\(13\sim 14\) \(10^5\) \(10^{18}\) D
\(15\sim 20\) \(10^5\) \(10^{18}\)
  • 特殊性质 A:保证所有 \(b_i\) 均为 \(1\)

  • 特殊性质 B:保证所有 \(b_i\) 均相等。

  • 特殊性质 C:保证 \(b_i\) 单调不增。

  • 特殊性质 D:保证 \(a_i\) 在数据范围内均匀随机生成。

本题输入数据较大,请选手自行选择较快的输入方式。

首先发现 \(b_i\) 到底有几个有用取决于 \(a_i-1\) 的数量,如果超过了 \(a_i-1\) 的数量那么多出部分在凑 \(\operatorname{mex}\) 的时候没有任何作用,所以有 \(b_i=\min(b_i,b_{i-1})\)\(a_i\ne a_{i-1}+1\) 就不管了)。然后记录一下 \(b_i>0\) 的最大 \(a_i\)\(maxn-1\),特判掉 \(maxn=0\) 的情况。

接下来考虑正常情况,对于 \(m\le maxn\) 特殊处理一下,\(m=0\) 无解,\(m=maxn\) 答案为 \(1\)(全在一个集合里),其它情况答案为 \(2\)(比这个 \(\operatorname{mex}\) 小的放一堆,剩下的放另一堆)。

考虑正常分组的情况,肯定是一个 \(0\)\(x-1\) 都有的集合凑出了 \(x\)。考虑 \(m\) 更大的询问,为了在尽量小的分组中凑出尽量大的和,我们希望得到的 \(\operatorname{mex}\) 尽量大,所以直接尽可能地使用还没有被使用的数凑出一个尽量大的连续序列即可。

如果在所有数都被用完了之后还有更大的 \(m\) 显然无解。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define MAXN 1000005
using namespace std;
const int inf=1e18;
int T,n,q,a[MAXN],b[MAXN],ans[MAXN];
struct Node{int c,id;
}c[MAXN];
bool cmp(Node x,Node y){return x.c<y.c;
}
signed main(){
//	freopen("mexdnc2.in","r",stdin);
//	freopen("my.out","w",stdout);scanf("%lld",&T);while(T--){scanf("%lld%lld",&n,&q);a[0]=-1,b[0]=inf;int maxn=0,flag=0;for(int i=1;i<=n;i++){scanf("%lld%lld",&a[i],&b[i]);if(a[i]!=a[i-1]+1)b[i]=0,flag=1;else{b[i]=min(b[i],b[i-1]);if(!flag)maxn=a[i]+1;}}for(int i=1;i<=q;i++){scanf("%lld",&c[i].c);c[i].id=i;}//if(T>3)continue;sort(c+1,c+q+1,cmp);int now=1;if(maxn==0){while(c[now].c==0&&now<=q)ans[c[now].id]=1,now++;while(now<=q)ans[c[now].id]=-1,now++;for(int i=1;i<=q;i++)printf("%lld\n",ans[i]);continue;}while(c[now].c<=maxn&&now<=q){if(!c[now].c)ans[c[now].id]=-1;else if(c[now].c==maxn)ans[c[now].id]=1;else ans[c[now].id]=2;now++;}int cnt=0,sum=0;//cout<<"!!!\n";for(int i=maxn;i;i--){//cout<<i<<"@@@\n";int tmp=b[i]-cnt;while(c[now].c<=sum+tmp*i&&now<=q){//cout<<i<<' '<<tmp<<' '<<c[now].id<<' '<<c[now].c<<"\n";ans[c[now].id]=cnt+(c[now].c-sum+i-1)/i;now++;}cnt+=tmp;sum+=tmp*i;}while(now<=q)ans[c[now].id]=-1,now++;for(int i=1;i<=q;i++)printf("%lld\n",ans[i]);}return 0;
}

T2

题面

P14508 猜数游戏 guess

题目描述

小 P 在玩一种新型的猜数游戏。他有一个一行无数格的棋盘,在棋盘的编号为 \(1\) 的格子处有一枚棋子,这枚棋子有 \(m\) 种移动方式,第 \(i\) 种移动方式可以使这枚棋子向左或向右移动 \(a_i\) 格,使用这种方式移动的花费为 \(b_i\)。在棋盘上有一个隐藏的目标位置,当小 P 知道了目标位置时,游戏胜利。

当棋子从位置 \(x\) 移动到位置 \(x+y\) 时,它会询问 \([x,x+y)\) 是否包含目标位置。同理,当棋子从位置 \(x\) 移动到位置 \(x-y\) 时,它会询问 \([x-y,x)\) 是否包含目标位置(\(y \ge 0\))。由于棋盘无限大,所以可以移动到负数位置。

现在小 P 已经知道目标位置在 \([1,n]\) 范围内,现在请你帮他求出,在采取最优策略时(可以根据询问的结果来决定策略),最坏情况需要花费多少才能获得胜利,若无法取得胜利,输出 \(-1\)

输入格式

本题有多组测试数据

输入的第一行包含两个整数 \(c,T\),表示测试点编号和测试数据的组数。

接下来包含 \(T\) 组数据,每组数据的格式如下:

  • 第一行包含两个整数 \(n,m\),表示目标位置的范围和移动方式的数量。
  • 第二行包含 \(m\) 个整数 \(a_1, a_2, \dots,a_m\) 表示第 \(i\) 种移动方式移动的格数。
  • 第三行包含 \(m\) 个整数 \(b_1, b_2, \dots,b_m\) 表示第 \(i\) 种移动方式所需的代价。

输出格式

对于每组测试数据输出一个整数,表示取得胜利的最小花费。若无法取得胜利,输出 \(-1\)

输入输出样例 #1

输入 #1

0 3
3 1
1
1
3 2
2 3
1 1
4 2
2 4
2 3

输出 #1

2
3
-1

说明/提示

【样例 1 解释】

对于第一组数据,最坏情况目标位置为 \(3\),棋子向右移动 \(2\) 格,可以判断出不是 \(1\)\(2\),即可得出答案。

对于第二组数据,一种可能的跳法为 \(1\to3\to0\to2\),可以证明没有更优的方法。

【样例 2】

见附件的 guess/guess2.in 与 guess/guess2.ans。

该样例满足测试点 \(2\sim 3\) 的约束条件。

【样例 3】

见附件的 guess/guess3.in 与 guess/guess3.ans。

该样例满足测试点 \(4\) 的约束条件。

【样例 4】

见附件的 guess/guess4.in 与 guess/guess4.ans。

该样例满足测试点 \(7\sim 11\) 的约束条件。

【样例 5】

见附件的 guess/guess5.in 与 guess/guess5.ans。

该样例满足测试点 \(15\sim 25\) 的约束条件。

【数据范围】

对于所有的数据,满足:

  • \(1\le T\le 10\)
  • \(1\le n\le 10^4\)\(1\le m\le 1000\)\(1\le a_i\le \min(n,1000)\)\(1\le b_i\le 10^9\)
    ::cute-table
测试点编号 \(n\leq\) \(m \leq\) 特殊性质
\(1\) \(10\) \(10\) A
\(2\sim 3\) ^ ^
\(4\) \(100\) \(20\) B
\(5\sim 6\) ^ ^
\(7\sim 11\) \(3000\) \(100\) ^
\(12\sim 14\) \(10^4\) \(1000\) B
\(15\sim 25\) ^ ^
  • 特殊性质 A:保证所有 \(a_i\) 均相同。
  • 特殊性质 B:保证所有 \(b_i\) 均相同。

\(f_i\) 表示从 \(1\) 验证到 \(i\) 的最小花费,\(cost_i\) 为移动 \(i\) 步的花费,则有 \(f_i=\min_{j=1}^{i-1}{\max(f_j,f_{i-j})+cost_j}\)。直接转移是 \(O(n^2)\) 的,但是记 \(V=\max_{i=1}^{m}a_i\),注意到对于大于 \(V\)\(j\) 其花费必然是走两步或更多转移而来的,所以 \(j\) 只要遍历到 \(\min(i-1,V)\) 即可,转移的复杂度优化为 \(O(nV)\)

接下来考虑 \(cost_i\) 如何计算,注意到除了直接输入的 \(cost_{a_i}\) 以外,其它 \(cost_i\) 都是通过往一个方向走 \(x\) 步在反着走 \(y\) 步(\(x>y\))得到的 \(cost_{x-y}=cost_x+cost_y\)。这个转移很像最短路的形式,由于 \(b_i\) 都是正的,新计算出的状态不可能被它后面的状态更新,所以直接把所有 \(-V\le j\le V\) 视作一个点,建 \(2m\) 条边到 \(j+a_i\)\(j-a_i\),边权为 \(b_i\),跑最短路即可,得到的 \(dis_j\) 即为 \(cost_j\),复杂度 \(O(nV+mV\log mV)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define MAXN 200005
#define mk make_pair
#define pi pair<int,int>
using namespace std;
const int inf=1e18,N=1e4;
int Tc,n,m,T,a[MAXN],b[MAXN],dis[MAXN],f[MAXN];
priority_queue<pi,vector<pi>,greater<pi> >q;
void upd(int x,int y,int w){if(dis[x+N]+w<dis[y+N]){dis[y+N]=dis[x+N]+w;q.push(mk(dis[y+N],y));}
}
signed main(){//freopen(".in","r",stdin);//freopen(".out","w",stdout);scanf("%lld%lld",&Tc,&T);while(T--){scanf("%lld%lld",&n,&m);int maxn=0;for(int i=1;i<=m;i++)scanf("%lld",&a[i]),maxn=max(maxn,a[i]);for(int i=1;i<=m;i++)scanf("%lld",&b[i]);for(int i=-maxn;i<=maxn;i++)dis[i+N]=inf;dis[N]=0;q.push(mk(0,0));while(!q.empty()){int x=q.top().second,d=q.top().first;q.pop();if(d!=dis[x+N])continue;//cout<<x<<' '<<dis[x+N]<<"\n";for(int i=1;i<=m;i++){if(x+a[i]<=maxn){int y=x+a[i];upd(x,y,b[i]);}if(x-a[i]>=-maxn){int y=x-a[i];upd(x,y,b[i]);}}}for(int i=0;i<=n;i++)f[i]=inf;f[1]=0;for(int i=2;i<=n;i++){for(int j=1;j<=min(maxn,i-1);j++){//cout<<f[i]<<' '<<j<<' '<<f[j]<<' '<<f[i-j]<<' '<<dis[j+N]<<"\n";f[i]=min(f[i],max(f[j],f[i-j])+dis[j+N]);}//cout<<i<<' '<<f[i]<<"!!!\n";}printf("%lld\n",f[n]<inf?f[n]:-1);}return 0;
}

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

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

相关文章

2025年安徽合肥速冻肉制品企业综合实力排行榜

摘要 随着速冻食品行业的快速发展,2025年速冻肉制品市场规模预计突破2500亿元,年复合增长率保持在12%以上。安徽合肥作为华东地区重要的食品加工基地,涌现出一批技术领先、品质可靠的速冻肉制品生产企业。本文基于企…

从技术骨干到卓越领导者的转型

从技术骨干到卓越领导者的转型背景从一名优秀的技术骨干转型为技术管理者,是一次充满机遇但也极具挑战的跨越。然而,许多新任管理者在初期都会陷入相似的困惑:• 个人能力与团队效果的落差:曾几何时,您写代码顺风…

【连续十届EI稳定,JPCS出版】第十一届机械制造技术与工程材料国际学术会议(ICMTEM 2025)

【连续十届EI稳定,JPCS出版】第十一届机械制造技术与工程材料国际学术会议(ICMTEM 2025)第十一届机械制造技术与工程材料国际学术会议(ICMTEM 2025) 2025年11月28-30日,中国辽宁沈阳沈阳奥体中心漫心酒店 截稿时…

【MySQL】组成部分

MySQL的主要组成部分类别 名称/示例 作用 理解MySQL服务器(Server) mysqld MySQL的核心程序。负责存储数据、执行SQL、管理用户权限、处理连接请求。 干活的后端引擎MySQL客户端程序(Client Programs) mysql、mysqladm…

2025年苏州海边婚纱照公司权威推荐:欧式宫廷婚纱照/中式秀禾服婚纱照/园林婚纱照服务机构精选

随着婚纱摄影市场的个性化发展,海边婚纱照凭借其自然风光、浪漫氛围和独特视觉效果,成为越来越多新人的首选。行业数据显示,2024年中国婚纱摄影市场规模达到687亿元,其中海边婚纱照占比28.5%,年增长率稳定在18.3%…

【前端从0到1实战】第8篇:构建“轮播图/滑块” (Carousel)

【前端从0到1实战】第8篇:构建“轮播图/滑块” (Carousel) 欢迎来到本系列的第四篇。在上一篇中,我们通过“多步骤表单”掌握了状态管理。今天,我们将把这个概念应用到动画中,构建一个专业级的“轮播图”组件。 轮…

2025年11月教育资源优质学习机品牌哪家好?基于多维评估与行业数据解析

在当今教育信息化浪潮中,优质学习机品牌已成为家庭教育的核心工具,其教育资源的质量直接关系到学生的学习效果与发展潜力。本文面向广大家长、教育工作者及采购决策者,深入剖析其在教育资源整合、学习效率提升、成本…

2025年11月学习机品牌哪家好?基于多维度评估与行业数据解析

在数字化教育浪潮的推动下,学习机已成为现代家庭不可或缺的智能教育工具。本文主要面向中小学生家长、教育从业者及关注智慧教育发展的群体,深入分析其在教育资源均衡化、个性化学习及效率提升方面的核心需求。当前教…

【前端从0到1实战】第6篇:构建“手风琴折叠菜单” (Accordion)

【前端从0到1实战】第6篇:构建“手风琴折叠菜单” (Accordion) 欢迎来到本系列的第二篇。在上一篇中,我们掌握了“Tab 选项卡”的横向切换。今天,我们将构建它的“垂直”版本——手风琴折叠菜单。 这个组件的交互非…

2025年11月小学生学习机品牌哪家好?基于教育科技趋势与用户需求深度解析

在当今注重教育品质的时代,为孩子选择一款合适的学习工具成为许多家庭的关切。对于正处于学习习惯养成关键期的小学生而言,一款专业可靠的学习机至关重要。本文针对家长、教育工作者等目标用户群体,深入分析其核心需…

流固热力学耦合仿真机构优选蓝图心算

项目案例分享 本项目旨在通过高保真度的数值模拟,研究一个燃烧装置在甲烷-氧气非预混燃烧工况下的综合性能。分析重点在于燃烧过程对金属室壁的热影响以及由此引发的结构响应。 项目分析机构》》》蓝图心算成都科技有…

2025/11/16 分享

分享一个有意思的问题 给定一个整数序列 \(a_{1}, a_{2}, \cdots, a_{n}\) ,询问至少需要修改多少个元素,可以使得 \(\forall i \in [2, n],\ a_{i} > a_{i - 1}\) 。 有意思的是由整数的离散性,我们可以看出这实…

教育资源优质学习机品牌全面解析与实用指南:2025年11月最新版TOP5推荐榜单

一、2025年11月TOP5推荐对象全景速览 1、读书郎 推荐星级:★★★★★ 口碑评分:9.9分 核心优势及特点:读书郎学习机以优质教育资源为核心竞争力,拥有二十六年教育领域深耕经验,其教育资源与新课改教材保持权威同步…

小学生学习机品牌全面解析与选购指南:2025年11月最新版TOP10权威推荐

在当今教育信息化快速发展的背景下,小学生学习机作为辅助教育的重要工具,其选择关系到学生的学习效果与身心健康发展。本文针对家长、教育工作者等目标群体,深入分析其核心需求包括学习资源质量、护眼功能、互动体验…

Rust: 面向生产的 hex 替代方案

主流替代方案详解追求迁移便利:选择 base16,API 兼容性最佳 需要丰富功能:选择 data-encoding,支持流式和批量操作 要求极致性能:选择 faster-hex,专为高性能场景优化 嵌入式/编译时需求:选择 const-hex,减少运…

银河麒麟服务器版 TigerVNC 远程桌面完整安装配置指南

银河麒麟服务器版 TigerVNC 远程桌面完整安装配置指南银河麒麟服务器版 TigerVNC 远程桌面完整安装配置指南 1. 安装TigerVNC服务器 # 更新yum仓库 sudo yum update# 安装TigerVNC服务器 sudo yum install tigervnc-se…

2025年塑胶跑道厂家推荐:湖北中奥特体育,预制型塑胶跑道/EPDM塑胶跑道/环保塑胶跑道/混合型塑胶跑道/专业打造环保运动场地

随着全民健身意识不断提升、体育场馆建设加速推进及校园运动设施升级需求增加,塑胶跑道作为核心运动场地设施,已从专业体育场馆逐步普及至学校、社区、公园等多个场景,2025 年市场规模预计持续扩大。但市场增长也带…

十八、sed命令

1、sed 流编辑器 根据事先设计好的一组规则编辑数据流。 sed编辑器根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。 sed编辑器会执行下列操作。一次从输入中读取一行数据。 …

别再被VO、BO、PO、DTO、DO绕晕!今天用一段代码把它们讲透

一、先放结论 它们都是“为了隔离变化”而诞生的马甲 缩写英文全称中文直译出现位置核心目的POPersistent Object持久化对象数据库 ↔ 代码一张表一行记录的直接映射DODomain Object领域对象核心业务逻辑层充血模型,封…

2025 最新推荐!装盒机厂家权威榜单发布,覆盖多行业专用设备及创新解决方案内外盒 / 面膜 / 电子产品 / 玩具 / 日用品装盒机厂家推荐

一、装盒机优质品牌推荐榜推荐一:广州科万智能装备有限公司品牌介绍:集设计研发、生产制造、销售服务于一体的综合型企业,拥有 5000 平方厂房及 50 人以上团队,其中技术人员 28 名,具备强大的研发与生产实力。秉持…