蓝桥杯 双向排列(Java)

2023-11-07

 

这题我看了两个博主的文章可算把它看懂了,链接如下:

蓝桥杯 I.双向排序_Jozky86的博客-CSDN博客_蓝桥杯双向排序

蓝桥杯2021年第十二届省赛-双向排序_zy98zy998的博客-CSDN博客_蓝桥杯双向排序

我的代码如下:

import java.util.*;
class Main{
	public static class pair{
		int x=0;
		int y=0;
		pair(int a,int b) {
			x=a;
			y=b;
		}
	}
	public static void main(String args[]) {
		int n,m;
		Scanner scan=new Scanner(System.in);
		n=scan.nextInt();
		m=scan.nextInt();
		pair[] pairs= new pair[n+1];
		int top=0;
		int item[]=new int[n+1];
//		for(int i=1;i<=n;i++) {
//			item[i]=i;
//		}
		int p,q;
		for(int i=0;i<m;i++) {//记录有效步骤
			p=scan.nextInt();
			q=scan.nextInt();
//			System.out.println("第"+i+"次输入操作: "+"p: "+p+"  q: "+q);
			if(p==1&&top>0) {//top大于0是为了保证第一次操作为 0操作
				while(top>0&&pairs[top].x==1) {//top记录上一个操作
					//若连续出现相同的操作,取范围大的那个
					if(pairs[top].y<=q) 
						q=pairs[top].y;
					--top;//将上一个操作的q赋值给当前的q,并将top移动至上一个操作的上一步
				}
				//若相邻的相同操作的范围小于当前范围,则top更新,舍弃小范围
				while(top>=2&&pairs[top-1].y>=q) {
					top-=2;//删除一组操作(即0操作和1操作)
				}
				pairs[++top]=new pair(1,q);//top始终停留在要记录操作的前一步
//				System.out.println("top: "+top+"  操作1  x: "+pairs[top].x+"  y: "+pairs[top].y);
				}
			if(p==0){
				while(top>0&&pairs[top].x==0) {
					if(pairs[top].y>=q)
						q=pairs[top].y;
					--top;
					}
				while(top>=2&&pairs[top-1].y<=q)//若不加=,会存两次相同的值
					top-=2;
				pairs[++top]=new pair(0,q);      
//				System.out.println("top:  "+top+"  操作0  x: "+pairs[top].x+"  y: "+pairs[top].y);
				}
		}
		
		int k=n;
		int l=1,r=n;
		for(int i=1;i<=top;i++) {
			if(pairs[i].x==0) {
				while(l<=r&&pairs[i].y<r)
					item[r--]=k--;
			}
			if(pairs[i].x==1) {
				while(l<=r&&pairs[i].y>l)
					item[l++]=k--;
			}
		}
		if(top%2==0) {//为操作1
			while(l<=r)
				item[r--]=k--;
		}
		else {//为操作0
			while(l<=r)
				item[l++]=k--;
		}
		for(int i=1;i<=n;i++) {
			System.out.print(item[i]+" ");
		}
	}
}

收获 

(1)自己不动手敲一遍永远不知道别人的代码有多精妙。

          top=0 :可以保证第一次的操作一定是“操作0” ,一旦 top不等于0 就说明已经存储了有效步骤操作0 ,那么就可以存储 操作1 了。

          在第一个while循环中,if条件中要取等号,因为最后一定进行存储操作的步骤,所以第一个while循环只是让q取有效值,所以不管q的值是否改变,都要 --top。

          在第二个while循环中,循环条件也要取等号,若不加等号,就会存储两次相同的操作值q。

          通过 top%2 来判断是哪个操作。因为top=1时一定是操作0,所以若余数为0,必为操作1。

(2)对象数组的有效创建。

         pair[] pairs=new pair[n] 只是干了这么一件事,pair pairs[1], pair pairs[2]......

         只进行了声明并未实例化。所以在存入有效操作时还要new。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯 双向排列(Java) 的相关文章

随机推荐

  • UML用例图的作用、功能模块图作用与数据库设计三者关系

    这周周一 我们导师要求小组成员开会 我们分别汇报自己的工作 在会中 谈到了用例图 于是我们开始对大家熟悉的用例图进行探讨 经过探讨与自己的思考 我认为应该从以下几个问题来弄清楚用例图的作用 1 用例图由谁来做 为谁做 做完了有什么用途 用例
  • Java8 stream 根据对象字段去重

    public class Java8StreamTest public static class Book private String id private String name public Book String id String
  • attention注意力机制学习

    参考资料 目前主流的attention方法都有哪些 JayLou娄杰的回答 知乎 目前主流的attention方法都有哪些 张戎的回答 知乎 Attention机制解读 高峰OUC的文章 知乎 Transformer详解 一 Attenti
  • linux:filezilla连接ubuntu失败,提示 状态:尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败。

    问题 如上 解决办法 发现ping的通 说明是别的问题 可能是端口号不对 sftp与ftp是否没有区别 超级向向阳的回答 知乎 ftp和sftp有什么区别 ftp和sftp哪个速度快 贝锐花生壳官网 ps 如果是连接超时 注意是否开启了防火
  • 记一次sqlmap的--os-shell的实战

    一 站点内容获取 描述 一个后台管理界面 通常我们会尝试使用弱口令爆破 sql注入 万能密码等 在这个站点我们尝试了弱口令爆破没有成功 但尝试sql注入成功了 并且发现了一系列的struts2框架漏洞 并成功接管了站点的数据库等等 二 站点
  • 2023华为OD机试真题【统一限载最小值】【2023.Q1】

    题目描述 火车站附近的货物中转站负责将到站货物运往仓库 小明在中转站负责调度2K辆中转车 K 辆干货中转车 K 辆湿货中转车 货物由不同供货商从各地发来 各地的货物是依次进站 然后小明按照卸货顺序依次装货到中转车上 一个供货商的货只能装到一
  • 如何在 Linux 中将文件编码转换为 UTF-8

    转自 https linux cn article 7959 1 html 在这篇教程中 我们将解释字符编码的含义 然后给出一些使用命令行工具将使用某种字符编码的文件转化为另一种编码的例子 最后 我们将一起看一看如何在 Linux 下将使用
  • Supermap聚合服务

    大家好 下面呢 我们来学习supermapserver的聚合服务 我们主要学习三个方面的内容 首先呢 我们来了解一下什么是聚合服务 它的一个含义那么其次呢 我们来了解一下聚合服务的原理啊 最后呢 我们来学习一下 如何去创建 聚合服务创建聚合
  • 使用Mathjax网页插入公式

    本文关于 想在网页里面插入公式 找到了 Mathjax 这里说怎么设置 具体来说是怎么在博客园设置 以及一点点如何使用 设置方法 需要开通js的权限 进入 设置 在页脚Html代码输入
  • eggjs中使用jwt

    开发接口时需要生成token 和校验token egg jwt就是一个很不错的插件 下边就教大家如何使用 废话不多说 先看效果 开始教程 安装包 yarn add egg jwt 全局引入jwt config plugin js modul
  • 真正的小说 真正的生活 真正的蜕变 真正的品味

    记得以前曾经看过这篇文章 但是没有看完全 今天蓦然在杜的空间再次看到这 篇文章 决定再看一次 而且 很认真的看完了 感觉现在的自己跟以前又不一样了 很 多的感触只是埋在心里 慢慢消融 慢慢体味 同时慢慢成长着 从他的字里行间我看得 到他是用
  • 计算机网络八和ctf做题七

    计算机网络学习了一段时间 因为里面有很多要记住的东西 而且还有很多协议有的还比较抽象 所以学着学着发现把那些协议都搞混了 所以这篇文章将要讲一些重要协议 点对点协议 点对点协议 点对点协议简称PPP协议 工作在数据链路层 设计目的主要是用来
  • linux下查看磁盘空间

    突然系统不能使用了 可以看一下是不是磁盘占满 了 首先登录到服务器 我的是mac 直接登录 使用ssh登录ssh t root 104 224 166 36 p27988 windows系统也可以使用 xshell来登录 命令行 df df
  • Debian下安装中文包和输入法【解决无法显示中文问题】

    以前一直用的都是ubuntu 输入法之类的点点鼠标就 了 最近需要使用debian了 安装了一个桌面版 vim写代码感觉有点恶心 安装的时候全部选择英文 运行起来发现竟然无法显示中文 输入法也没找到在哪里设置 我是在虚拟机下安装的 可能会有
  • ITX-RK3588J在Ubuntu22.04上进行SDK编译与烧写

    一 SDK下载 在Window上下载好最新的SDK 并把他放拉到虚拟机里的Ubuntu22 04上 二 搭建编译环境 Firefly维基教程上 需要安装编译环境 直接使用 sudo apt get install 软件名 安装全部软件 su
  • X2000 Linux PWM

    一 硬件设计 PC04 PWM4 二 通过shell开启PWM 配置参数 cmd pwm config pc04 freq 1000 max level 100 active level 1 accuracy priority freq 启
  • Docker容器中启动Arthas异常

    使用Docker容器部署spring boot项目 Dockerfile文件内容如下 FROM openjdk 8 jre alpine 第一步将apk源替换为国内阿里源 没有第一步将下载难产 RUN echo e https mirror
  • 117.Django-缓存redis

    1 概述 动态网站的基本权衡是 它们是动态的 每次用户请求页面时 Web服务器都会进行各种计算 从数据库查询到模板呈现再到业务逻辑 以创建站点访问者看到的页面 从处理开销的角度来看 这比标准的文件读取文件系统服务器要耗时多了 对于大多数We
  • 【CS229 lecture19】微分动态规划

    首先声明一下 这节课基本没听懂 但是还是把课程笔记写下 lecture19 微分动态规划 继续强化学习算法的讨论 Agenda 课程中段我曾讲过调试learning algorithm 今天再来将强化学习的部分 The motivating
  • 蓝桥杯 双向排列(Java)

    这题我看了两个博主的文章可算把它看懂了 链接如下 蓝桥杯 I 双向排序 Jozky86的博客 CSDN博客 蓝桥杯双向排序 蓝桥杯2021年第十二届省赛 双向排序 zy98zy998的博客 CSDN博客 蓝桥杯双向排序 我的代码如下 imp