当前位置: 首页 > news >正文

2023年西安交通大学校赛(E-雪中楼)

E.雪中楼

在这里插入图片描述

如果算出按南北的序列,再转成从低到高的编号序列,岂不是太麻烦了,幸好,没有在这方面费长时间,而是意识到,本质就是要从低到高的编号序列,所以我就按样例模拟了一下,当a[i]=0时说明编号为i的楼,是前面所有楼中最低的,这时i就该放前面,如果为j,说明它比j高,这时i就该放到j后面。
答案上是用的链表,这样就可以实现,不断插入合适的位置。而我起初用的定义find和insert,查找位置,再插入,果不其然,时间超限。
如果不太会链表,可以看看下面的方法:
既然a[i]=0,就放前面,那我可以从后往前遍历,遇到0,就把i输出,这样就直接放前面了。而遇到其他值就先存起来,存的时候,存两个a[i]和i,也就是i你要放到a[i]后边。当你输出a[i]的时候,就将存储里边接到他后边也输出。记住,先存先出。

代码

#include<bits/stdc++.h>
using namespace std;
map<int,int> q[200005];
void print(int i)
{for(auto it:q[i]){cout<<it.second<<' ';	if(q[it.second].size()!=0)	print(it.second);这里要递归,把接在输出后面的值,也输出}	
}
int main()
{int n,k=0,a[200005];cin>>n;		for(int i=1;i<=n;i++){cin>>a[i];}for(int i=n;i>=1;i--){if(a[i]==0) {cout<<i<<" ";print(i);}elseq[a[i]][k++]+=i;		}
}
http://www.lryc.cn/news/358371.html

相关文章:

  • 如何在vue2中使用tailwind
  • 【OrangePi AIpro】开箱初体验以及OAK深度相机测试
  • 滑动窗口模板(Java)
  • transformers.BertTokenizer入门使用
  • 快乐数-力扣
  • Git标签的使用
  • 【uni-app】Pinia 持久化
  • Flink 窗口
  • 基于大模型和RAG技术实现的开源项目
  • mac m1安装homebrew管理工具(brew命令)完整流程
  • Liunx学习随笔
  • mac中文件夹怎么显示.git隐藏文件
  • 【PB案例学习笔记】-13 徒手做个电子时钟
  • Java多线程——线程强制执行
  • 虹科Pico汽车示波器 | 免拆诊断案例 | 2017款奔驰E300L车行驶中发动机偶尔无法加速
  • 华发股份:加强业务协同 新政下项目热销
  • RedHat9网络配置设计
  • HDR视频相关标准-HDR vivid(二)
  • uniapp或微信小程序一些问题解决
  • 最长递增子序列,交错字符串
  • 力扣:344. 反转字符串
  • linux Inodes满导致数据库宕机
  • 【STL】C++ stack(栈) 基本使用
  • 轻量级 K8S 环境 安装minikube
  • 市场巨变,移动开发行业即将迎来“第二春”?
  • DependencyCheck工具使用
  • oracle翻页查询的小坑记录
  • 学习笔记——动态路由协议——OSPF(OSPF基本术语)
  • 子集和问题(回溯法)
  • 【NumPy】全面解析arange函数:高效创建数值范围数组