NOJ1099移动小球——经典的想法

算法竞赛入门经典经典例题及习题题解 Github仓库 有些例题没找到完全相同的题目,找了类似的。 文章目录算法竞赛入门经典第一版第5章 基础题目选解5.1 字符串5.2 高精度计算5.3 排序与检索5.4 数学基础第六章 数据结构基础6.1 栈和队列6.2 链表6.3 二叉树6.4 图第七章 暴力求解法7.1 简单枚举7.2 枚举排列7.3 子集生成7.4 回溯法7.5 隐式树的遍历第八章 高效算法设计8.1 算法初步分析8.2 再... 阅读详情

移动小球

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:883            测试通过:107

描述

你有一些小球,从左到右依次编号为1,2,3,…,n,如下图所示:

你可以执行两种指令。其中A X Y表示把小球X移动到小球Y左边,B X Y表示把小球X移动到小球Y右边。指令保证合法,即X不等于Y。
例如,在初始状态下执行A 1 4后,小球1被移动到小球4的左边,如下图所示:

如果再执行B 3 5,结点3将会移到5的右边,如下图所示:

输入

输入小球个数n。指令条数m和m条指令,注意,1≤n≤500000,0≤m≤100000。

输出

从左到右输出最后的小球序列。

样例输入

6 2
A 1 4
B 3 5

样例输出

2 1 4 5 3 6

题目来源

刘汝佳《算法竞赛入门经典》


分析:很难想到的解法。也不是说没见过,就是不太容易想起来。其实类似于双链表。很nice的解法!此题坑较多= =

//移动小球
//坑真是多:getchar(别再忘了),cin超时,交换有顺序,输出要递增变化,输出最后无空格
#include<iostream>
using namespace std;

int lefts[500001];
int rights[500001];

void init(int n)
{
	rights[0] = 1;
	for(int i=1;i<=n;i++)
	{
		lefts[i] = i-1;
		rights[i] = i+1;
	}
}

int main()
{
	int n, m, x, y;
	char ch;
	scanf("%d%d",&n,&m);
	init(n);
	//getchar();
	while(m--)
	{
		getchar();
		scanf("%c%d%d",&ch,&x,&y);
		//cin>>ch>>x>>y;
		lefts[rights[x]] = lefts[x]; // 调整原来x的左右
		rights[lefts[x]] = rights[x];
		if(ch == 'A')
		{
			rights[lefts[y]] = x;
			lefts[x] = lefts[y];
			rights[x] = y;
			lefts[y] = x;
		}
		else
		{
			/*
			rights[y] = x;
			lefts[x] = y;
			rights[x] = rights[y];
			lefts[rights[y]] = x;
			*/
			rights[x] = rights[y]; // 顺序先后很重要!
			lefts[rights[y]] = x;
			rights[y] = x;
			lefts[x] = y;
		}
	}
	//for(int i=0;i<n-1;i++) printf("%d ",rights[i]);
	//printf("%d\n",rights[n-1]);
	int tmp = 0;
	for(int i=0;i<n-1;i++)
	{
		tmp = rights[tmp];
		printf("%d ",tmp);
	}
	printf("%d\n",rights[tmp]);

	return 0;
}



蓝桥杯 - 算法训练 - 移动小球 C语言实现 移动小球 你有一些小球,从左到右依次编号为1,2,3,...,n. 你可以执行两种指令(1或者2)。 其中, 1 X Y表示把小球X移动到小球Y的左边, 2 X Y表示把小球X移动到小球Y右边。  指令保证合法,即X不等于Y。 例如,初始状态1,2,3,4,5,6的小球执行1 1 4后,小球1被移动到小球4的左边, 即2,3,1,4,5,6。如果再执行2 3 5,结点3将会移到5的 阅读详情

相关推荐

Algorithm学习笔记 --- 小球移动问题

Algorithm学习笔记 --- 小球移动问题

杨鑫newlife的专栏 2182

链表初涉

在多数情况下,线性表都用它的顺序存储结构——数组很轻松实现,但对有些问题有时用它的链式存储结构——链表更好。 移动小球。 你有一些小球,从左到右依次编号为1,2,3,…,n, 可以执行两种指令。其中,AX Y表法把小球X移动到小球Y左边,B X Y表示把小球X移动到小球Y右边。指令保证合法,即X不等于Y。 例如,在初始状态下执行A1 4后,小球被移动小球4的左边。 ...

weixin_34413065的博客 204

若依(RuoYi)框架从零到部署:Spring Boot+Vue权限系统完整配置指南

在Java企业级应用开发中,Spring Boot作为构建微服务和单体应用的基石,极大地简化了项目初始化和配置流程。其核心原理在于通过自动配置和起步依赖,快速整合数据访问、安全认证、缓存等常用模块,显著提升开发效率。这一技术价值在需要快速构建后台管理系统的场景中尤为突出,例如权限管理、用户角色分配等通用需求。若依(RuoYi)框架正是基于Spring Boot和Vue.js的优秀实践,它封装了RBAC权限模型、代码生成器等高频功能,提供了开箱即用的解决方案。本文聚焦于若依框架的【环境配置】与【项目部署】,通

weixin_33984032的博客 455

移动小球

原题地址 移动小球 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:760            测试通过:88 描述 你有一些小球,从左到右依次编号为1,2,3,…,n,如下图所示: 你可以执行两种指令。其中A X Y表示把小球X移动到小球Y左边,B X Y表示把小球X移动到小球Y右边。

Air_one 2593

【探秘】二维异形件重叠移除算法:从度量到消除的实战解析

本文深入解析二维异形件重叠移除算法的核心技术与实战应用,涵盖重叠度量、零件扰动策略及消除方法。通过NFP(临界多边形)技术、空间分区加速等优化手段,有效解决异形件排版中的重叠问题,提升材料利用率和计算效率。适合制造业、CAD软件开发者及算法工程师参考。

weixin_28698059的博客 251

用Blender给ArduPilot无人船编队设计灯光秀:从建模到飞行的保姆级教程

本文详细介绍了如何利用Blender和ArduPilot为无人船编队设计灯光秀的全流程技术方案。从3D动画设计、坐标转换、数据导出到ArduPilot飞控配置和灯光控制,提供了一套完整的保姆级教程,帮助开发者实现水面灯光编队表演。

weixin_29213525的博客 386

算法训练-移动小球

Description 你有一些小球,从左到右依次编号为1,2,3,...,n. 你可以执行两种指令(1或者2)。 其中, 1 X Y表示把小球X移动到小球Y的左边, 2 X Y表示把小球X移动到小球Y右边。 指令保证合法,即X不等于Y。 例如,初始状态1,2,3,4,5,6的小球执行1 1 4后,小球1被移动到小球4的左边, 即2,3,1,4,5,6。如果再执行2 3 5,结点3将会移

程序猿之洞 3161

从充电管理芯片里‘偷师’:拆解一个PMOS双向开关电路,搞定你的固态继电器需求

本文深入解析了PMOS双向开关电路在固态继电器应用中的设计要点,重点探讨了防电流倒灌和高侧双向开关的实现技巧。通过拆解充电管理芯片中的PMOS背靠背结构,工程师可以构建高效可靠的固态开关方案,适用于智能硬件和电池管理系统。文章还提供了关键参数选择、电路优化建议及实测数据对比,助力解决电源防反接等工程难题。

weixin_33698043的博客 481

移动小球-C++-链表实现

题目描述: 你有一些小球,从左到右依次编号为1,2,3,…,n, 你可以执行两种指令。其中A X Y表示把小球X移动到小球Y左边,B X Y表示把小球X移动到小球Y右边。指令保证合法,即X不 #include &lt;iostream&gt; using namespace std; struct ball { int number; struct ball *next; }; bal...

给我加个蛋再走 1556

【重磅更新】CT/MRI LI-RADS 2024:肝细胞癌局部区域治疗后反应评估的核心突破与临床实践指南

减少过度治疗:辐射 LRT 的 Nonprogressing 类别避免了 “持续强化 = 存活” 的误判,降低不必要的再治疗风险;提高检出效率:非辐射 LRT 的辅助特征升级减少了 Equivocal 比例,更早识别存活肿瘤;统一评估语言:标准化的分类标准为放射科、肝病科、肿瘤科、肝移植科的多学科协作(MDT)提供了统一 “沟通工具”,助力治疗方案的精准制定。

楚山之石的博客 1225

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1743

链表水题一道sicily 1934.移动小球 -- 线性结构,链表,水题

题目描述 你有一些小球,从左到右依次编号为1,2,3,...,n. 你可以执行两种指令(1或者2)。其中, 1 X Y表示把小球X移动到小球Y的左边, 2 X Y表示把小球X移动到小球Y右边。 指令保证合法,即X不等于Y。 例如,初始状态1,2,3,4,5,6的小球执行1 1 4后,小球1被移动到小球4的左边,即2,3,1,4,5,6。如果再执行2 3 5,结点3将会移到5的右边,即2,1,

奋斗青年的专栏 906

详解FreeRTOS:事件标志组(高级篇—5)

事件组可以实现一对多,多对多的同步,即一个任务可以等待多个事件的发生。任务可以通过设置事件位来实现事件的触发和等待操作,FreeRTOS的事件仅用于同步,不提供数据传输功能。

不脱发的程序猿 1074

关于小球移动题目的一点思考

最近在网上看到一道题,是这样描述的: Description 你有一些小球,从左到右依次编号为1,2,3,...,n. 你可以执行两种指令(1或者2)。其中, 1 X Y表示把小球X移动到小球Y的左边, 2 X Y表示把小球X移动到小球Y右边。 指令保证合法,即X不等于Y。 例如,初始状态1,2,3,4,5,6的小球执行1 1 4后,小球1被移动到小球4的左边,即2,3,1,4,5,6。如果再...

WaxAndWane1996的博客 708

Spark Sql 连接mysql

转载请务必注明原创地址为:http://dongkelun.com/2018/03/21/sparkMysql/ 1、基本概念和用法(摘自spark官方文档中文版) Spark SQL 还有一个能够使用 JDBC 从其他数据库读取数据的数据源。当使用 JDBC 访问其它数据库时,应该首选 JdbcRDD。这是因为结果是以数据框(DataFrame)返回的,且这样 Spark SQL操作轻松或便......

主要分享大数据相关的知识,如Spark、Hudi 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

html5小球移动

html> head> meta charset="utf-8"/> head> body onkeydown="test()"> h1>小球上下左右移动h1> canvas id="test" width="400px" height="300px" style="background-color:black">canvas> script type="text/

W1365966490的专栏 2144

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

链表-移动小球

你有一些小球,从左到右依次编号为1,2,3,4,5,....,n。你可以执行两种指令,其中A X Y表示将编号为X的小球移到编号为Y的小球左边,B X Y表示把小球X移到小球Y的右边,指令保证合法,即X不等于Y。例如当n等于6时,小球的初始顺序为1 2 3 4 5 6,执行A 1 4后的顺序为2 3 1 4 5 6,继续执行B 3 5之后的顺序为:2 1 4 5 3 6

GoWilli的优快云 702

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

算法竞赛入门经典:第六章 数据结构基础 6.3移动小球

/* 移动小球: 我有小球,从左到右一次编号为1,2,3,...,n 你可以执行两种指令: A X Y表示把小球X移动到小球Y的左边,B X Y表示把小球X移动到小球Y的右边。指令保证合法,即X不等于Y。 输入小球个数n,指令条数m和m条指令,从左到右输出最后的序列。注意,n可能高达500000,而m可能高达100000 输入: 6 2 A 1 4 B 3 5 输出: 2 1 4 5 3 6 关

qingyuanluofeng的专栏 942

移动的小球

h .canvas{ background:#000; } window.onload=function(){ var width = window.innerWidth, height =window.innerHeight; S.init(); }

sun-shadow的专栏 618

Sicily 1934.移动小球 | 数组模拟

1934. 移动小球     Total: 6765 Accepted: 1833 Rating: 3.6/5.0(35 votes) 012 345                 Time L

linzch3的博客 823
上一篇: NOJ1098Rails——出栈顺序
下一篇: NOJ1100最长回文子串——经典算法
tcherry
博客等级 码龄16年 46粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值