C. Nauuo and Cards(思维)

news2024/10/5 12:49:49

Problem - C - Codeforces

Nauuo是一个喜欢玩纸牌的女孩。
—天,她在玩纸牌时发现牌被混入了一些空牌。
这里有n张编号为1到n的牌,并且它们被混入另外n张空牌中。她把这2n张牌堆起来并且从中取出n张。给定N&
uuo手中的n张牌和余下的n张牌(按照从上到下的顺序)。
在一次操作中,她可以选择手中的一张牌并打出它——将它放在牌堆底部,然后从牌堆顶部抽出一张牌。
Nauuo想要以尽可能快的方式使n个编号牌以递增顺序堆放起来(堆放在从上到下的第i个位置的牌为第张牌)。你能告诉她最少需要多少次操作吗?
输入
第一行包含—个整数n (1<n<2-105)——编号牌的数量。
第二行包含n个整数a1,a2....n (0sai≤n)——Nauuo手中的初始牌。0代表一张空牌。
第三行包含n个整数b1,b2.….n (Osbisn)——初始牌堆中的n张牌,按从顶部到底部的顺序给出。0代表一张空牌。
保证每个数字1到n恰好在a1..n或b1..n中出现一次。
输出
输出一个整数——使n个编号牌堆放起来所需的最小操作次数。

Examples

input

Copy

3
0 2 0
3 0 1

output

Copy

2

input

Copy

3
0 2 0
1 0 3

output

Copy

4

input

Copy

11
0 0 0 5 0 0 0 4 0 0 11
9 2 6 0 8 1 7 0 3 0 10

output

Copy

18

示例
我们可以在第一次操作中打出牌2并画出第三张牌。之后,我们手上有[0,3,0],牌内饼从上到下是0,1,2)。
然后,我们在第二次操作中打出第三张牌,牌堆中的牌是[1,2,3],其中牌的顺序是递增的。
打一张空牌,然后画一张牌,然后按顺序打1,2,3。
题解:

思路:经过简单的手推可以发现 如果一个牌在应该b中的位置是i,那么它在i-1的位置时候 需要移动n次才能达到i。

即 ans=max(ans,per[i]-(i-1)+n) 这是最坏的情况 也就是先把所有牌都放在手上 然后依次插入

还有一种情况可以节省操作此时 那就是 以1,2,3,...,k结尾的 并且k~n的数 都可出现在手里 这样就不必取出了,答案就是pre[1] - 1。

(怎么说呢,大佬的思维和代码能力都不是我等凡人可以企及的QAQ)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
//#define int long long
typedef pair<int,int> PII; 
const int N = 1e6 + 10;
int a[N];
int b[N];
int pre[N];
void solve()
{
	int n;
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
	}
	for(int i = 1;i <= n;i++)
	{
		cin >> b[i];
		pre[b[i]] = i;
	}
	if(pre[1])
	{
		int cnt = 1;
		int id = pre[1];
		for(int i = pre[cnt];i <= n;i++)
		{
			if(pre[cnt] == i)
			{
				cnt++;
				id = i;
			}
			else
			{
				break;
			}
		}
		if(id == n)
		{
			for(int i = 0;i <= n;i++)
			{
				if(pre[cnt] <= i)
				{
					cnt++;
				}
				else
				{
					break;
				} 
			}
			if(cnt > n)
			{
				cout << pre[1] - 1;
				return ;
			}
		}
	}
	int ans = 0;
	for(int i = 1;i <= n;i++)
	{
		ans = max(ans,pre[i] - (i - 1) + n);
	}
	cout <<ans;
}


signed main()
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	int t = 1;
//	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3天学会Pytest自动化测试框架,哭着都要给我看完

目录 【前言】 【什么是pytest】 【pytest的特点】 【pytest的使用方法】 【附加内容】 【总结】 【前言】 在软件开发过程中&#xff0c;自动化测试是提高软件质量和效率的重要手段之一。pytest作为Python编写的自动化测试框架&#xff0c;具有简单易用、灵活性强等优点…

<Linux>POSIX信号量

目录 什么是信号量 如何理解信号量的使用 基于环形队列的生产消费者模型 如上问题我们如何用编码保证 &#xff1f;(信号量) 编码&#xff1a; POSIX信号量和SystemV信号量作用相同&#xff0c;都是用于同步操作。POSIX可以用于线程同步。 信号量本质上就是一个计数器。 什…

TS数据类型

基本数据类型 null undefined number string boolean 对于基本数据类型&#xff0c;可以不写类型注解&#xff0c;ts能通过值来判断变量的类型 let nu null let un undefined let num 23 let str "sdfk" let isShow true引用数据类型 数组 写法1 let arr:…

iconik--AI智能媒体管理解决方案

ftrack于去年加入Backlight&#xff0c;旗下有Celtx, Iconik, Wildmoka, 和Zype。这些公司都为媒体、娱乐和视频领域的客户提供基于云的解决方案。 今天&#xff0c;我们就来隆重地介绍其中一款软件–iconik&#xff01;谷歌、VICE媒体、亚马逊旗下米高梅、Complex Networks和S…

【C++初阶】C++入门

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C初阶 ⭐代码仓库&#xff1a;C初阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

GMW协议

概述 回顾混淆电路的流程&#xff0c;一方生成加密真值表&#xff0c;另一方执行计算&#xff0c;门电路的输入通过主动发送和不经意传输索取实现&#xff0c;用这样的方式来达到多方计算中一些公平性。 那么是否可以让双方拥有更加对等的地位&#xff0c;让每个参与方都持有一…

华为OD机试真题(Java),数组合并(100%通过+复盘思路)

一、题目描述 现在有多组整数数组&#xff0c;需要将他们合并成一个新的数组。 合并规则从每个数组里按顺序取出固定长度的内容&#xff0c;合并到新的数组&#xff0c;取完的内容会删除掉。 如果改行不足固定长度&#xff0c;或者已经为空&#xff0c;则直接取出剩余部分的内…

Numpy从入门到精通——Numpy运算符|批处理

这个专栏名为《Numpy从入门到精通》&#xff0c;顾名思义&#xff0c;是记录自己学习numpy的学习过程&#xff0c;也方便自己之后复盘&#xff01;为深度学习的进一步学习奠定基础&#xff01;希望能给大家带来帮助&#xff0c;爱睡觉的咋祝您生活愉快&#xff01; 这一篇介绍《…

Android 项目编译 Gradle 配置说明

前言 Android 的Gradle版本更新换代还是很快的&#xff0c;更新换代除了功能上变得强大之外&#xff0c;还会出现很多意料之外的Bug&#xff0c;而很多开发者会被折磨的死去活来&#xff0c;下面我们来看有哪些编译配置。 正文 首先要知道什么时候会进行编译&#xff0c;有以下…

Efficient Attention: Attention with Linear Complexities

paper: https://arxiv.org/pdf/1812.01243.pdf 这里写目录标题 一、引言二、方法实现高效注意力的解释效率优势 三、实验消融插入层键的维度骨干架构 一、引言 注意机制在计算机视觉和自然语言处理中有着广泛的应用。最近的工作开发了点积注意力机制&#xff0c;并将其应用于…

MobileBERT模型简单介绍

目录 一、概要 二、深入扩展 2.1 知识蒸馏方法 2.2 渐进式知识迁移 一、概要 MobileBERT 可以看作一个“瘦身”后的BERT-large模型&#xff0c;其使用了瓶颈结构&#xff08;Bottleneck Structure&#xff09;&#xff0c;并且在自注意力和前馈神经网络的设计上也有一定的改…

图形化之家谱遗传系统

1&#xff1a;废话不多说先看成果。 QQ录屏20230418163603 QQ录屏20230418163732 2&#xff1a;解析&#xff1a; 1&#xff1a;不知道会有多少个孩子&#xff0c;所以我们用二叉树的孩子兄弟结构 typedef struct treeNode {char name[100];//名字int generation;//辈分char g…

Pytorch深度学习笔记(五)反向传播算法

推荐课程&#xff1a;04.反向传播_哔哩哔哩_bilibili 1.为什么要使用反向传播算法 简单模型可以使用解析式更新w 复杂模型&#xff0c;如图&#xff0c;输入矩阵为5*1矩阵&#xff0c;等一层权重矩阵H1为6*5矩阵&#xff0c;则需要30个解析式&#xff0c;第二层权重矩阵H2为6…

1685_Excel的几种脚本处理方式

全部学习汇总&#xff1a; GreyZhang/python_basic: My learning notes about python. (github.com) 做个小结&#xff0c;实际上是写的我自己学习的过程。 关于Excel的处理方式很多&#xff0c;我也不会那么多&#xff0c;在这里我只想写一下我自己接触过的。大致是三种方式&a…

Pikachu靶场(Cross-Site Scripting)

Cross-Site Scripting 反射型xss(get)源代码修改限制地址栏 反射性xss(post)存储型xssDOM型xss-xxss盲打xss之过滤xss之htmlspecialcharsxss之href输出xss之js输出 Cross-Site Scripting 简称为“CSS”&#xff0c;为避免与前端叠成样式表的缩写"CSS"冲突&#xff0c…

《花雕学AI》25:用文字画出你的非凡想象力,微软新Bing带你体验DALL-E的神奇

你有没有想过用文字来画画&#xff1f;这听起来可能很不可思议&#xff0c;但是现在&#xff0c;你可以通过微软新Bing来实现这个想法。微软新Bing支持AI绘画功能&#xff0c;只要输入一句话&#xff0c;就能生成一幅图像。这个功能是由DALL-E驱动的&#xff0c;DALL-E是一个能…

mybatis03-多表查询、延迟加载、逆向工程

mybatis03 mybatis 多表联查 背景产生&#xff1a;开发过程中单表查询 不能满足项目需求分析功能。对于复杂业务来说&#xff0c;关联的表有几张&#xff0c;甚至几十张 并且表与表之间的关系相当复杂。目的&#xff1a;实现复杂业务功能&#xff0c;必须进行多表查询&#x…

开发插件JFormDesigner(可视化GUI编程)的使用与注册-简单几步即可完成

开发插件JFormDesigner&#xff08;可视化GUI编程&#xff09;的使用与注册 获取链接&#xff1a;1.JFormDesigner获取2.记录插件下载路径3.使用zcj注册4.生成license5.打开idea进行注册 获取链接&#xff1a; https://pan.baidu.com/s/1N9ua2p3BpiMIARCEewRxIw?pwd4e9a 提取…

WebSocket 通信 —— 浏览器原生支持

在上一篇内容中讲到使用Node中的Net核心模块完成socket通信&#xff0c;那么本篇就继续来讲关于浏览器原生支持的 WebSocket &#xff0c;实现通信。那么什么是 WebSocket ? 它是HTML5开始提供的一种浏览器与服务器间进行全双工&#xff08;全双工&#xff1a;同时进行双向传输…

激活函数(Activation Function)及十大常见激活函数

目录 1 激活函数的概念和作用 1.1 激活函数的概念 1.2 激活函数的作用 1.3 通俗地理解一下激活函数&#xff08;图文结合&#xff09; 1.3.1 无激活函数的神经网络 1.3.2 带激活函数的神经网络 2 神经网络梯度消失与梯度爆炸 2.1 简介梯度消失与梯度爆炸 2.2 梯度不稳…