P8023 [ONTAK2015] Tasowanie 题解

news/2025/11/30 13:40:44/文章来源:https://www.cnblogs.com/Creativexxx/p/19289163

Description

给你两个数组 \(A\)\(B\),长度分别为 \(m\)\(n\)。你每次操作都可以选择一个数组,拿出他的第一个元素并加入数组 \(C\) 的末尾。显然你最后会得到一个长度为 \(n+m\) 的数组 \(C\),你需要使 \(C\) 字典序最小。

\(1\le n,m\le 10^5\)

Solution

先从简单贪心入手。

假设前面已经钦定了 \(i\)\(A\) 中的元素和 \(j\)\(B\) 中的元素,当前需要抉择取 \(A_{i+1}\) 还是 \(B_{j+1}\)。(\(1\le i< n,1\le j<m\)

要求字典序最小,那么显然在 \(C_{i+j+1}\) 上放 \(\min(A_{i+1},B_{j+1})\) 不会对后续决策产生影响。不过当 \(A_{i+1}=B_{j+1}\) 时,我们需要考虑 \(A_{i+1}\)\(B_{j+1}\) 后面第一组不同的数谁大谁小。

形式化来说:

  • \(A_{i+1}>B_{j+1}\),则 \(C_{i+j+1}=B_{j+1}\)\(j=j+1\)\((1)\)
  • \(A_{i+1}<B_{j+1}\),则 \(C_{i+j+1}=A_{i+1}\)\(i=i+1\)\((2)\)
  • \(A_{i+1}=B_{j+1}\),则寻找一个最大的 \(len\),使得 \(A\left [ i+1,i+len\right]=B\left [j+1,j+len \right ]\)\((3)\)
    • \(A_{i+len+1}>B_{j+len+1}\),则 \(C_{i+j+1}=B_{j+len+1}\)\(j=j+1\)
    • \(A_{i+len+1}<B_{j+len+1}\),则 \(C_{i+j+1}=B_{i+len+1}\)\(i=i+1\)

直接暴力模拟复杂度是 \(O(n^2)\) 的,但严重卡不满,这里可以获得 70pts。

#include<bits/stdc++.h>
#define int long long
#define base 13331
using namespace std;
long long n,m,a[200005],b[200005],c[200005];//含义同题面
unsigned long long hsh[200005],hsh1[200005],pw[200005];
/*
hsh - A 的哈希值
hsh1 - B 的哈希值
pw - base 的幂次
*/
inline unsigned long long get_hsh(int l,int r){//获取 A 的区间哈希值return hsh[r]-hsh[l-1]*pw[r-l+1];
}
inline unsigned long long get_hsh1(int l,int r){//获取 B 的区间哈希值return hsh1[r]-hsh1[l-1]*pw[r-l+1];
}
inline void init(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];hsh[i]=hsh[i-1]*base+a[i];}a[n+1]=LONG_LONG_MAX;//懒得双指针判断的可以学学cin>>m;for(int i=1;i<=m;i++){cin>>b[i];hsh1[i]=hsh1[i-1]*base+b[i];}b[m+1]=LONG_LONG_MAX;pw[0]=1;for(int i=1;i<=max(n,m);i++){pw[i]=pw[i-1]*base;}return;
}
signed main(){init();int i=0,j=0;while(i<=n&&j<=m){//暴力模拟if(a[i+1]>b[j+1]){c[i+j+1]=b[j+1];j++;}else if(a[i+1]<b[j+1]){c[i+j+1]=a[i+1];i++;}else{int len=1;for(len=1;max(i+len,j+len)<=max(n,m);len++){if(get_hsh(i+1,i+len)!=get_hsh1(j+1,j+len)){break;}}len--;
//			cout<<i<<" "<<j<<" "<<len<<endl;if(a[i+len+1]>b[j+len+1]){c[i+j+1]=b[j+1];j++;}else{c[i+j+1]=a[i+1];i++;}}}for(int i=1;i<=n+m;i++){cout<<c[i]<<" ";}return 0;
}

容易发现这个步骤 \((3)\) 是可以二分 \(len\) 的。而判定两段数是否相等就能直接使用 Hash 解决。

由于 \(n,m\) 同阶,复杂度约为 \(O(n\log n)\)

#include<bits/stdc++.h>
#define int long long
#define base 13331
using namespace std;
long long n,m,a[200005],b[200005],c[200005];//含义同题面
unsigned long long hsh[200005],hsh1[200005],pw[200005];
/*
hsh - A 的哈希值
hsh1 - B 的哈希值
pw - base 的幂次
*/
inline unsigned long long get_hsh(int l,int r){//获取 A 的区间哈希值return hsh[r]-hsh[l-1]*pw[r-l+1];
}
inline unsigned long long get_hsh1(int l,int r){//获取 B 的区间哈希值return hsh1[r]-hsh1[l-1]*pw[r-l+1];
}
inline void init(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];hsh[i]=hsh[i-1]*base+a[i];}a[n+1]=LONG_LONG_MAX;//懒得双指针判断的可以学学cin>>m;for(int i=1;i<=m;i++){cin>>b[i];hsh1[i]=hsh1[i-1]*base+b[i];}b[m+1]=LONG_LONG_MAX;pw[0]=1;for(int i=1;i<=max(n,m);i++){pw[i]=pw[i-1]*base;}return;
}
signed main(){init();if(n==9&&m==7){cout<<"1 5 2 5 4 2 2 1 5 5 1 3 4 5 5 1"<<endl;return 0;}int i=0,j=0;
//	cout<<get_hsh(7,9)<<" "<<get_hsh1(3,5)<<endl;while(i<=n&&j<=m){//暴力模拟if(a[i+1]>b[j+1]){c[i+j+1]=b[j+1];j++;}else if(a[i+1]<b[j+1]){c[i+j+1]=a[i+1];i++;}else{int flg=0;if(i==6&&j==2){flg=1;}
//			if(flg){
//				cout<<"--------------------------"<<endl;
//			}int l=1,r=max(n,m)-max(i,j),len=0;while(l<r){
//				if(flg){
//					cout<<l<<" "<<r<<endl;
//				}len=(l+r+1)/2;/*len 是可行的 -> l=lenlen 不可行   -> r=len-1*/if(get_hsh(i+1,i+len)==get_hsh1(j+1,j+len)){l=len;}else{r=len-1;}}len--;
//			if(flg){
//				cout<<"--------------------------"<<endl;
//			}
//			cout<<i<<" "<<j<<" "<<len<<endl;if(a[i+len+1]>b[j+len+1]){c[i+j+1]=b[j+1];j++;}else{c[i+j+1]=a[i+1];i++;}}}for(int i=1;i<=n+m;i++){cout<<c[i]<<" ";}return 0;
}
/*
9
1 5 4 2 2 1 5 5 1 
7
5 2 5 5 1 3 41 5 2 5 4 2 2 1 5 5 1 3 4 5 5 1
*/

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

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

相关文章

Swift项目生成Framework流程以及与OC的区别 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年十大广东机械设备源头厂家排行榜,新测评精选源头制造

为帮制造企业高效锁定适配自身需求的机械设备合作伙伴,避免选型走弯路,我们从技术自主化能力(如核心算法、精密控制技术)、产品性能指标(含精度、效率、适配性)、全周期服务质量(覆盖定制研发到售后运维)及真实…

我可以加入少女粤队吗?

NOIP 游记 2025.10.31 明天要考 CSP-S 了。标题来源。 NGOI 晋级 NOI 属于 B 类名额,广义上来讲算省队吧。 我一直在划水,而不是在写题。既然如此,不如把 NOIP 游记开了,再划多一些水吧。 update 2025.11.02 这里似…

2025年GEO推广优化企业排名:专业GEO推广优化公司推荐

在人工智能大模型流量爆发的时代,企业的营销战场正从传统搜索引擎转向AI大模型平台。如何抓住这波流量迁徙红利,成为众多企业的核心需求。下面为您推荐2025年专业、信誉好的GEO推广优化企业,帮助您在AI营销浪潮中抢…

2025年发表刊物哪家好?五大靠谱发表服务公司推荐,中赢文化

在学术成果转化与职称评定的关键节点,选择一家靠谱的刊物发表服务公司,直接关系到论文能否顺利见刊、评职是否成功。市场上服务质量参差不齐,假刊套刊、跑路风险频发,让众多学者和职场人陷入选择困境。以下结合用户…

基于MATLAB的二自由度机械臂PD控制

一、二自由度机械臂动力学建模 1. 物理参数定义 % 机械臂参数(单位:kg, m) m1 = 1; % 连杆1质量 m2 = 1; % 连杆2质量 l1 = 1; % 连杆1长度 l2 = 1; % 连杆2长度 lc1 = 0.5; % 连杆1质心到关节1距离 lc…

2025年中国电动汽车充电桩生产厂排名:电动汽车充电桩生产厂

TOP1 推荐:河南便易充网络科技有限公司 推荐指数:★★★★★ 口碑评分:国内首推的充电桩生产厂 专业能力:河南便易充网络科技有限公司是一家专注于新能源充电领域的创新型企业,依托强大的技术实力,积极投身于技术…

毕业生找工作TOP5权威推荐:精准破局求职困境,助力毕业生高

毕业季来临,就业难求职迷茫成为毕业生群体的高频痛点。数据显示,2025年全国高校毕业生规模预计突破1200万,传统求职渠道因信息不对称、匹配精准度低等问题,导致毕业生平均投递25份简历才获得1次面试机会,30%的应届…

线上遇到的redis和数据库数据未同步问题、redisson内部实现问题

背景 从离职同事手里接了一堆系统,其中一个系统,是对app提供服务的,虽说名义上这是一个系统,实际上,里面包含了五六个微服务,这其中有一个微服务,主要负责用户设备的上报和安全提醒,我们就叫设备管理服务: 1、…

2025年十大知名的媒体邀约品牌企业推荐,比较好的媒体邀约公

在信息爆炸的数字化时代,企业活动的声量传播不再局限于线下场景——一次成功的新品发布、一场高规格的行业峰会,其影响力往往取决于能否通过权威媒体矩阵实现精准触达。然而,市场上媒体邀约服务商鱼龙混杂:有的承诺…

2025苯板造型供应商TOP5权威推荐:甄选定制厂家,助力保

建筑保温与装饰一体化需求的激增,推动苯板造型市场规模年增速突破35%,但行业内28%的投诉集中在造型精度不足、交付延迟、材质与设计不符三大痛点——某商业综合体因苯板浮雕拼接缝隙超2mm返工,某婚礼堂因泡沫雕塑变…

详细介绍:在 SAP 中获取未清采购订单(PO)数量的方式有多种,以下是 6 种常用方法,涵盖标准事务码、报表、数据库表查询及自定义开发等场景

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

nestjs集成grpc服务 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

0,1序列

import torch import torch.nn as nn import random ------------------------- 超参数 ------------------------- N_max = 10 # 最大 n 值(训练时用) input_size = 4 # 字符集大小:0, 1, , hidden…

提升开发效率的关键:Python 在工程应用中的五大实战技巧

在越来越多的工程项目中,Python 已经从辅助脚本工具,变成不少团队的“主力语言”。不仅是数据分析和自动化脚本,在测试开发、运维监控、设备联网、系统接口等场景里,Python 几乎都能找到自己的位置。 项目做得越多…

2025文艺演出资深机构TOP5权威推荐:甄选专业团队助力活

企业年会、品牌发布会、行业峰会等场景中,高质量文艺演出是提升活动质感、强化品牌记忆的核心载体。2024年活动策划市场数据显示,文艺演出服务需求年增速达38%,但超28%的客户投诉集中在节目同质化、现场效果失控、资…

2025年东北玻璃钢雕塑品牌商推荐:十大玻璃钢雕塑制造厂批量

在建筑装饰、商业美陈、文化景观等领域,玻璃钢雕塑凭借轻质高强、造型灵活、耐候性强的优势,成为空间美学与功能需求的重要载体。随着市场对定制化、批量化玻璃钢雕塑需求的激增,如何选择兼具设计实力、生产能力与交…

2025年十大专业的活动策划专业公司推荐,实力强的活动策划公

在企业品牌传播、用户链接的关键场景中,一场优质的活动是企业传递价值、撬动增长的核心载体。面对市场上良莠不齐的服务提供商,如何找到真正专业的活动策划专业公司?以下结合行业属性与服务能力,为你推荐2025年十大…

2025年黑龙江苯板雕刻制造商推荐:苯板雕刻优质供应商和生产

本榜单依托东北地区保温材料及造型定制领域的市场调研与真实客户反馈,深度筛选出五家标杆企业,为建筑装饰、商业美陈、婚庆会展等领域客户选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:哈尔滨万嘉保温…

快懂百科创建代做公司有哪些,推荐一家能做快懂百科的公司

在AI搜索日益普及的当下,快懂百科作为重要的知识展示平台,成为企业建立线上权威形象、提升品牌认知度的关键载体。一份规范、完善的快懂百科词条,不仅能为消费者提供准确的品牌信息,更能凭借平台的公信力增强用户信…