NYOJ 511 移动小球

本文提供了一个关于移动小球问题的Java实现方案。通过定义一个F类来记录每个小球的左右邻居,并使用switch-case结构处理三种操作指令:A(移动至左侧)、B(移动至右侧)和Q(查询)。该程序接收输入并根据指令改变小球的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目连接:移动小球



import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int N=input.nextInt();
		while(N-->0){
			int n=input.nextInt();
			int m=input.nextInt();
			F f[]=new F[n+1];
			for(int i=1;i<=n;i++){
				f[i]=new F(i-1,i,i+1);
			}
			f[1].left=n;//1的左边是n
			f[n].right=1;//n的右边是1
			while(m-->0){
				String a=input.next();
				int y=input.nextInt();
				int z=input.nextInt();
				char j=a.charAt(0);
				switch(j){
					case 'A':{
						f[f[y].left].right=f[y].right;//删除小球y
						f[f[y].right].left=f[y].left;//删除小球y
						//把y插入到z左边
						f[y].left=f[z].left;
						f[y].right=z;
						f[f[z].left].right=y;
						f[z].left=y;
					}
					break;
					case 'B':{
						f[f[y].left].right=f[y].right;//删除小球y
						f[f[y].right].left=f[y].left;//删除小球y
						//把y插入到z右边
						f[y].left=z;
						f[y].right=f[z].right;
						f[f[z].right].left=y;
						f[z].right=y;
					}
					break;
					case 'Q':{
						if(y==1){
							System.out.println(f[z].right);
						}
						else
							System.out.println(f[z].left);
					}
				}
			}
		}
	}
}
class F{//记录每个小球的左右小球
	int left,s,right;
	F(int left,int s,int right){
		this.left=left;
		this.s=s;
		this.right=right;
	}
	F(){
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值