尧图网络科技 Logo 尧图网络科技
  • 首页
  • 关于我们
  • 建站服务
  • UI 设计
  • 案例展示
  • SEO 优化
  • 资讯中心
  • 联系我们

资讯详情

深度解读 · 专业分析

  • 首页
  • 资讯中心
  • /
  • P7115 [NOIP2020] 移球游戏 题解

最新资讯

  • 全部资讯
  • 行业动态
  • UI 设计
  • SEO 优化
  • 网站开发

P7115 [NOIP2020] 移球游戏 题解

📅 发布时间:2026/6/18 2:54:09 👁 浏览次数:
P7115 [NOIP2020] 移球游戏 题解

P7115 [NOIP2020] 移球游戏 题解

(本蒟蒻的第一篇题解,不喜勿喷)

NOIP2020 移球游戏 题解

题目描述

有 \(n + 1\) 根柱子(编号 \(1 \sim n+1\)),前 \(n\) 根柱子上有 \(m\) 个球,第 \(n+1\) 根为空。共有 \(n\) 种颜色,每种颜色恰好 \(m\) 个球。

目标:通过移动球(每次只能移动某柱顶部球到另一柱顶部,且每柱球数不超过 \(m\)),使得每根柱子上的球颜色相同。

要求操作次数不超过 \(820000\)。

解法思路

我们采用分治法,将颜色区间不断二分,利用空柱辅助,将柱子按颜色类别划分。

符号说明

\(\text{col}[i][j]\):柱子 \(i\) 从底到顶的第 \(j\) 个球的颜色。

\(\text{top}[i]\):柱子 \(i\) 当前的球数。

\(\text{ans}\):存储操作序列 \((from, to)\)。

\(\text{empty}\):当前可用的空柱编号(初始为 \(n+1\))。

核心过程:双柱分离

设当前要分离的两类颜色为 \(A\)(颜色 \(\in [l, \text{mid}]\))和 \(B\)(颜色 \(\in [\text{mid}+1, r]\))。

对于两根柱子 \(X\) 和 \(Y\),以及一个空柱 \(E\),我们要将 \(X\) 变为纯 \(A\) 类柱或 \(Y\) 变为纯 \(B\) 类柱。

情形 1:\(A\) 类球数量 \(\ge m\)

目标:将 \(X\) 变为纯 \(A\) 类柱。

统计 \(X\) 中 \(A\) 类球的数量 \(s\)。

将 \(Y\) 顶部的 \(s\) 个球移到 \(E\)。

依次处理 \(X\) 的顶部球:

若为 \(A\) 类,移到 \(Y\);

若为 \(B\) 类,移到 \(E\)。

将 \(Y\) 顶部的 \(s\) 个球(来自 \(X\) 的 \(A\) 类球)移回 \(X\)。

将 \(E\) 顶部的 \(m-s\) 个球(来自 \(X\) 的 \(B\) 类球)移回 \(X\)。

将 \(E\) 中剩下的 \(m-s\) 个球(原 \(Y\) 的顶部球)移回 \(Y\)。

此时 \(X\) 为纯 \(A\) 类柱,\(Y\) 和 \(E\) 恢复原状(但 \(Y\) 可能混有 \(A/B\) 类球)。

情形 2:\(A\) 类球数量 \(< m\)

目标:将 \(Y\) 变为纯 \(B\) 类柱。

统计 \(Y\) 中 \(B\) 类球的数量 \(s\)。

将 \(X\) 顶部的 \(s\) 个球移到 \(E\)。

依次处理 \(Y\) 的顶部球:

若为 \(B\) 类,移到 \(X\);

若为 \(A\) 类,移到 \(E\)。

将 \(X\) 顶部的 \(s\) 个球(来自 \(Y\) 的 \(B\) 类球)移回 \(Y\)。

将 \(E\) 顶部的 \(m-s\) 个球(来自 \(Y\) 的 \(A\) 类球)移回 \(Y\)。

将 \(E\) 中剩下的 \(m-s\) 个球(原 \(X\) 的顶部球)移回 \(X\)。

此时 \(Y\) 为纯 \(B\) 类柱,\(X\) 和 \(E\) 恢复原状(但 \(X\) 可能混有 \(A/B\) 类球)。

复杂度分析

操作次数:每次双柱分离约需 \(5m\) 次操作,每层分治需 \(O(n)\) 次配对,深度 \(O(\log n)\),总计约 \(5mn \log n\)。

代入 \(n \le 50, m \le 400\),得 \(5 \times 400 \times 50 \times \log_2 50 \approx 5 \times 400 \times 50 \times 6 = 600000\),满足要求。

时间复杂度:\(O(nm \log n)\)。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 60;
const int M = 410;
const int K = 820005;int n, m;
int t;
int top[N];
int a[N][M];
int em;
pair<int, int> ans[K];
bool impx[M], impy[M];void move(int x, int y)
{ans[++t] = make_pair(x, y);a[y][++top[y]] = a[x][top[x]--];
}int merge(int x, int y, int mid)
{int cx = 0, cy = 0;for(int i = 1; i <= m; i++){impx[i] = a[x][i] <= mid;impy[i] = a[y][i] <= mid;}for(int i = 1; i <= m; i++){cx += impx[i];cy += impy[i];}if(cx + cy > m){cx = m - cx;cy = m - cy;for(int i = 1; i <= m; i++){impx[i] ^= 1;impy[i] ^= 1;}}for(int i = 1; i <= m; i++){if(!impx[i] && cx + cy < m){impx[i] = 1;cx++;}}for(int i = cx; i; i--){move(y, em);}for(int i = m; i; i--){if(impx[i]){move(x, y);}else{move(x, em);}}for(int i = m - cx; i; i--){move(em, x);}for(int i = cx; i; i--){move(y, x);}for(int i = cx; i; i--){move(em, y);}for(int i = cx; i; i--){move(x, em);}for(int i = m; i; i--){if(impy[i]){move(y, em);}else{move(y, x);}}int p = em;em = y;return p;
}void solve(int l, int r)
{if(l == r){return;}int mid = (l + r) >> 1;vector<int> now;for(int i = 1; i <= n + 1; i++){if(i == em){continue;}if(l <= a[i][1] && a[i][1] <= r){now.push_back(i);}}for(int i = 0; i + 1 < now.size(); i++){now[i + 1] = merge(now[i], now[i + 1], mid);}solve(l, mid);solve(mid + 1, r);
}int main()
{scanf("%d%d", &n, &m);em = n + 1;for(int i = 1; i <= n; i++){top[i] = m;for(int j = 1; j <= m; j++){scanf("%d", &a[i][j]);}}t = 0;solve(1, n);printf("%d\n", t);for(int i = 1; i <= t; i++){printf("%d %d\n", ans[i].first, ans[i].second);}return 0;
}

相关新闻

2025年12月本田雅阁更换轮胎推荐:最新性能测评与选购攻略

2025年12月本田雅阁更换轮胎推荐:最新性能测评与选购攻略

2026/6/18 2:53:37 查看详情
获取运行中的exe的窗口标题名

获取运行中的exe的窗口标题名

2026/6/11 6:19:04 查看详情
12.7

12.7

2026/6/11 6:19:03 查看详情
2026年新消息:台州好的塑料皮垫销售厂家哪家靠谱?专业视角解析台州市欧玮印务有限公司 - 品牌鉴赏官2026

2026年新消息:台州好的塑料皮垫销售厂家哪家靠谱?专业视角解析台州市欧玮印务有限公司 - 品牌鉴赏官2026

2026/6/18 2:52:34 查看详情
把Gemini网页端逆向成OpenAI API,这野路子有点东西

把Gemini网页端逆向成OpenAI API,这野路子有点东西

2026/6/18 2:52:34 查看详情
2026水族过滤设备怎么选才稳?品牌口碑、维护成本与马印滤材参考 - 华旭传媒

2026水族过滤设备怎么选才稳?品牌口碑、维护成本与马印滤材参考 - 华旭传媒

2026/6/18 2:52:34 查看详情
AI网关与传统网关的差异

AI网关与传统网关的差异

2026/6/18 2:52:34 查看详情
微信 AI 客服如何真正落地?从 WechatApi 看智能服务的新路径

微信 AI 客服如何真正落地?从 WechatApi 看智能服务的新路径

2026/6/18 2:52:34 查看详情
AI多Agent协同工作流:LlamaIndex+Bedrock+Slack工程实践

AI多Agent协同工作流:LlamaIndex+Bedrock+Slack工程实践

2026/6/18 2:50:22 查看详情
在Android设备上运行完整Linux系统:proot-distro的魔法与实用指南

在Android设备上运行完整Linux系统:proot-distro的魔法与实用指南

2026/6/18 0:01:28 查看详情
ZigBee ZCL事件驱动与基础簇实战:从原理到健壮设备开发

ZigBee ZCL事件驱动与基础簇实战:从原理到健壮设备开发

2026/6/18 0:01:28 查看详情
时间序列分解实战指南:趋势、季节性与残差的工程化解读

时间序列分解实战指南:趋势、季节性与残差的工程化解读

2026/6/18 0:01:28 查看详情
从Landsat到高分系列:手把手教你选择适合自己项目的遥感卫星数据

从Landsat到高分系列:手把手教你选择适合自己项目的遥感卫星数据

2026/6/17 16:21:19 查看详情
福州空调维修上门加氟移机空调不制冷、推荐本地老牌鑫盛达、冷顺安 - 我叫一

福州空调维修上门加氟移机空调不制冷、推荐本地老牌鑫盛达、冷顺安 - 我叫一

2026/6/17 16:06:28 查看详情
嵌入式调试器组件化界面与拖拽交互技术详解

嵌入式调试器组件化界面与拖拽交互技术详解

2026/6/17 16:15:44 查看详情
YOLOv11涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇| 引入CMGF 引导特征融合机制,实现对不同模态特征的自适应增强与高效融合,助力多模态目标检测,小目标检测或分割有效涨点

YOLOv11涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇| 引入CMGF 引导特征融合机制,实现对不同模态特征的自适应增强与高效融合,助力多模态目标检测,小目标检测或分割有效涨点

2026/6/17 21:10:37 查看详情
E-E-A-T 成第一权重:2027 年无经验内容将被彻底淘汰

E-E-A-T 成第一权重:2027 年无经验内容将被彻底淘汰

2026/6/17 21:10:30 查看详情
深圳福田园岭老小区搬家公司推荐 经验足师傅高效搬运攻略 - 从来都是英雄出少年

深圳福田园岭老小区搬家公司推荐 经验足师傅高效搬运攻略 - 从来都是英雄出少年

2026/6/17 21:06:50 查看详情

关于尧图

立足北京本地的一站式网站建设服务与设计教学平台,深耕企业网站定制开发、全网 SEO 优化及网络推广服务。

快速链接

  • 关于我们
  • 建站服务
  • 案例展示
  • 资讯中心

服务项目

  • 企业官网定制
  • UI 界面设计
  • SEO 优化推广
  • 移动端适配

联系方式

电话:400-XXX-XXXX

邮箱:info@zskr.cn

地址:北京市朝阳区 XXX 路 XX 号

© 2026 尧图网络科技 版权所有 | 京 ICP 备 XXXXXXXX 号