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

扑克洗牌

题目描述

Nanarikom 有 n 张扑克牌。初始状态下,牌堆中第 i 张扑克牌上的数字为 i。

为了进行洗牌,Nanarikom 每次会进行以下操作中的一种:

  • 从牌堆顶取出 1 张牌,插入到牌堆的任意位置中。
  • 从牌堆底取出 1 张牌,插入到牌堆的任意位置中。

在操作过程中,牌堆内未被取出的牌相对顺序保持不变。

现在,Nanarikom 想要衡量牌堆的混乱程度。具体地,对于给定的牌堆,Nanarikom 想知道,从初始状态牌堆变换到给定牌堆所需的最小操作次数。

你需要回答 Nanarikom 的 T 组询问。

输入

第一行包含一个整数 T(1\leqslant T\leqslant 10^5),代表测试数据组数。对于每组测试数据:
第一行包含一个整数 n(1\leqslant n\leqslant 10^5),代表扑克牌的数量;
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n),代表给定的牌堆顺序。
输入数据保证 \sum n\leqslant 10^6,且 a1,a2,…,an 是一个排列。

输出

对于每组测试数据,输出一个整数,代表完成变换的最小操作次数。

样例输入
1
5
4 1 2 5 3
样例输出
2
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int T;
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>T;while(T--){ll n;cin>>n;vector<ll>a(n+1,0);vector<ll>pos(n+1,0);for(ll i=1;i<=n;i++){cin>>a[i];pos[a[i]]=i;}ll ans=1,len=1;for(ll i=2;i<=n;i++){if(pos[i]>pos[i-1]){len++;}else{len=1;}if(len>ans)ans=len;}cout<<n-ans<<"\n";}return 0;
}

我在解这道题时,出现的问题:

1.忽略了n=1这一特殊情况,按平时的习惯,将ans初始化为0。本题应将ans初始化为1。

2.思考的漏洞:将ans的刷新放入了pos[i]<pos[i-1]的选择中。导致如果i=n时pos[i]仍然大于pos[i-1],ans无法及时刷新。

http://www.dtcms.com/a/303462.html

相关文章:

  • NVMe高速传输之摆脱XDMA设计18:PRP控制模块设计
  • NVMe高速传输之摆脱XDMA设计21:PCIe请求模块设计(下)
  • 机器学习基础-matplotlib
  • clock_nanosleep系统调用及示例
  • node后端-JWT认证
  • Excel VBA宏的使用
  • 大模型应用班-第3课 从Excel到大屏:AI编程实战全解析 HW3 从零到一:香港疫情数据看板开发实战指南
  • 【GoLang #4】:Go 语言 函数详述(定义调用 | 匿名函数 闭包 | defer)
  • windows clion远程连接ubuntu运行调试nginx-1.22.1版本
  • 【优先级高,先补充】基于文本增强跨模态特征交互注意网络的多模态情感分析
  • SVN与GIT的区别,分别使用与哪些管理场景?
  • 《汇编语言:基于X86处理器》第10章 结构和宏(2)
  • Linux——线程池的模拟实现
  • 解决c++静态成员编译报错:‘xxx‘ is not a member of ‘xxx‘ 问题
  • 第五届先进算法与神经网络国际学术会议(AANN 2025)
  • vue项目进首页不加载全部资源
  • 【数据结构初阶】--二叉树(三)
  • ICDC自动化部署方案概述
  • 如何规范化项目执行
  • 2024年7月19日全国青少年信息素养大赛图形化(Scratch)编程小学低年级组复赛真题+答案解析
  • KubeSphere离线部署Kubernetes集群
  • “量子通信”
  • 系统远程配置
  • 概率有限自动机定义与示例
  • 智慧社区项目开发(二)——基于 JWT 的登录验证功能实现详解
  • 吃透 lambda 表达式(匿名函数)
  • mysql详细知识点
  • python中类变量 __slots__ 解析
  • Matplotlib(三)- 图表辅助元素
  • Vue3判断对象是否为空方法