G - 1-n数组

news2025/4/6 23:14:32

第四次题组 [Cloned] - Virtual Judge (vjudge.net)

【题目描述】

给你一个数组一个a[n]组成n正整数。您可以对其执行操作。

在一个操作中,您可以替换数组的任何元素一个我a_{i}​跟⌊a_{i}/2​​⌋

看看您是否可以多次应用该操作(可能操作为0) 来制作数组一个一个成为数字的排列1自n,也就是说,以便它包含来自1自n,每个正好一次。

例如,如果a[n]=[ 1,8,25,2],n=4,那么答案是肯定的。您可以执行以下操作:

  1. 取代8跟⌊8/2⌋=4,然后,a=[ 1,4,25,2].
  2. 取代25跟⌊25/2⌋=12,然后,a=[ 1,4,12,2].
  3. 取代12跟⌊12/2⌋=6,然后,a=[ 1,4,6,2].
  4. 取代6跟⌊6/2⌋=3,然后,a=[ 1,4,3,2].

【输入】

输入数据的第一行包含一个整数t (1≤t≤104) - 测试用例的数量。

每个测试用例正好包含两行。第一个包含一个整数n (1≤n≤50),第二个包含整数a1,a2,...,an (1≤ai​≤109).

【输出】 

对于每个测试用例,在单独的行上输出:

  • 是的,如果你可以制作数组一个一个成为数字的排列1自n,
  • 没有其他。

在任何情况下,您都可以输出“是”和“否”(例如,字符串 yEs、yes、Yes 和 YES 将被识别为肯定响应)。

解题思路

题意是找出满足要求的数组(数组中的数字经过操作后,可以将数组中所有的数字属于1-n之间,且每个数字出现一次)。

首先要清楚,要从n找到1,也就是从大往小找。为什么呢?假设从小向大找,但是数组中的数字都能经过有限次操作后变为1,偶数都能经过操作变为2……也就是说满足操作后变为n或n-1等数字,也就一定能变为1,所以我们要从大往小找。

我首先是将数组按照从大到小排序,这一步其实可以删去。

然后遍历数组,用一个计数器统计当前找到的满足条件的数量,其中n-flag是相除后要满足的数字大小,然后将i赋值为n-flag,(n-flag下标之前的是已经满足数组条件的,接下来继续找后面的数字)。

没找到的情况,就接着往下找,找到时先将当前位置i与n-flag下标对应的数组数字交换,将n-flag放到对应的位置上去,同时i下标对应的数字a[i]也可以在循环下接着找。

代码如下

#include<iostream>
#include<algorithm>
using namespace std;
int a[55];
bool cmp(int a, int b) {
	return a > b;
}
void fun(int x, int y) {
	int t = a[x];
	a[x] = a[y];
	a[y] = t;
}
int main() {
	int t, n;
	cin >> t;
	while (t--) {
		cin >> n;
		for (int i = 0; i < n; i++) {
			cin >> a[i];
		}
		//按照从大到小排序
		sort(a, a + n, cmp);
		//判断当前有多少个已经查出来的满足题目要求的计数器
		int flag = 0;
		
		for (int i = 0; i < n; i++) {
			int x = a[i];
			while (x > n - flag) {
				x = x / 2;
			}
			//n-flag刚好是当前要找的数
			if (x == n - flag) {
				//找到之后,将数组中对应的位置与满足条件的位置交换
				fun(i, flag);
				//此时计数器自增
				flag++;
				i = flag - 1;
			}
		}
		if (flag == n) {
			cout << "YES" << endl;
		}
		else
			cout << "NO" << endl;
	}

}

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

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

相关文章

Apache Commons CSV 基本使用

Apache Commons CSV 基本使用 文章目录 Apache Commons CSV 基本使用一、概述1、简介2、主要特点3、官方资料 二、基本使用1、引入依赖2、读取 .csv 文件文件内容读取文件 3、写入文件写入文件写入结果 一、概述 1、简介 Apache Commons CSV是Apache软件基金会的一个开源项目…

Android——认识Android (Android发展简介)(一)

如果想要学习好Android开发&#xff0c;首先需要能够熟练应用以下的几个知识&#xff1a; JavaSE : 理解面向对象&#xff0c;掌握网络通信&#xff0c;掌握集合&#xff0c;掌握IO操作&#xff0c;要懂得图形化界面swing。 JavaEE&#xff1a;也需要一定的了解&#xff0c;以…

mysql简单入门常见的语句使用

一、安装mysql 二、数据库操作 1、进入本地数据库 win r 运行cmd.exe 输入命令 mysql -uroot -p 敲回车&#xff1b;随后输入密码&#xff1b; -u用户名 -p密码; 1.1 连接远程数据库:mysql -h ip地址 -u 用户名 -p mysql -h 10.10.25.159 -u root -p root-h主机名…

git push 报错 error: src refspec master does not match any 解决

真是TN的邪了门了&#xff0c;今天在Gitee上创建了一个新项目&#xff0c;然后要把本地的代码push上去时&#xff0c;报了如下错误&#xff1a; ➜ *** git:(main) git push -u origin "master" error: src refspec master does not match any error: failed to pu…

Windows上通过CMake编译COLMAP源码操作步骤

COLMAP源码&#xff1a;https://github.com/colmap/colmap &#xff0c;最新的稳定版本位于master分支&#xff0c;最新的开发版本位于dev分支&#xff0c;这里使用master分支进行编译&#xff0c;commit id为1555ff0。官方推荐使用vs2019&#xff0c;使用vs2022有一些已知bugs…

Metasploit介绍

Metasploit介绍 我们经常在电影里看到有关黑客的镜头&#xff0c;他们通常在几个屏幕上一顿操作就能轻松“黑“进各种系统。这样的场景是不是很熟悉&#xff0c;是不是很羡慕&#xff1f; 今天我来介绍一下Metasploit Framework&#xff0c;简称MSF。这个工具就可以做到“Hacki…

Qt5.12.6配置Android Arm开发环境(windows)

1. 安装jdk1.8 2.安装Android Studio 并安装 SDK 与NDK SDK Tools 选择 26.0.3 SDK Platform 选择 Android SDK Platform 26 NDK选择19版本 安卓ARM环境配置成功如下: JDK1.8 , SDK 26 , NDK 19 在安装QT时要选择 ARMv7(32位CPU)与ARM64-v8a(64位CPU) 选择支持android平台…

全国各个省份市区县明细数据

全国总共有23个省、5个自治区、4个直辖市、2个特别行政区。 此数据包含省、市、区、县数据&#xff0c;共2886个。——更新于2023年6月10日 费了不少时间&#xff0c;暂时应该没有比我更全的了~~~细致到区县了 包括台湾省&#xff1a;台北市,新北市,桃园市,台中市,台南市,高…

计算机网络-子网划分

计算机网络-子网划分与CRC差错校验 文章目录 计算机网络-子网划分与CRC差错校验IP地址的分类A类地址B类地址C类地址D类地址和E类地址和特殊IP地址子网掩码实战&#x1f4aa; IP协议是 TCP/IP体系中最主要的协议之一&#xff0c;也是最重要的互联网协议之一。 IP协议是32位&am…

ubuntu22.04.2安装onlyoffice(不更改默认端口版)

目录 一、配置阿里源 二、postgresql数据库 &#xff08;一&#xff09;安装postgresql &#xff08;二&#xff09;创建postgresql数据库和用户 三、安装 rabbitmq 四、安装nginx-extras 五、安装ONLYOFFICE Docs &#xff08;一&#xff09;Add GPG key &#xff08…

【html总结--详细版】

目录 一、html 常用的标签 二、列表分为有序列表、无序列表、自定义列表 有序列表&#xff1a; 无序列表&#xff1a; 自定义列表&#xff1a; 三、hr 四、特殊符号 五、div和span 六、图片的属性 七、超链接 八、table表格的基本结构 table的属性 tr的属性 td的属性…

(七)CSharp-刘铁锰版-事件

一、初步了解事件 定义&#xff1a;单词 Event &#xff0c;译为“事件” 《牛津词典》中的解释是“a thing that happens,especially something important”通顺的解释就是“能够发生的什么事情” 角色&#xff1a; 使对象或类具备通知能力的成员 &#xff08;中译&#x…

数据可视化大屏人员停留系统的开发实录(默认加载条件筛选、单击加载、自动刷新加载、异步加载数据)

项目需求 录入进入房间的相关数据&#xff1b;从进入时间开始计时&#xff0c;计算滞留房间的时间&#xff1b;定时刷新数据&#xff0c;超过30分钟的人数&#xff0c;进行红色告警&#xff1b; 实现流程 为了完整地实现上述需求&#xff0c;我们可以按照以下步骤开发&#…

Log4j2漏洞复现补丁绕过

漏洞复现 这里我一共使用了两个jdk版本 8u202的情况比较特殊&#xff0c;其实我今天凌晨在家里用的也是8u202的版本&#xff0c;失败了。今天来公司也是用的8u202版本的jdk&#xff0c;成功了。我仔细研究了两者的不同&#xff0c;我发现唯一不同的就是我公司这个idea启的proie…

NLP——分布式语义 Distributional Semantics:Word Vectors;Word2Vec

文章目录 传统语义数据集的缺点分布式语义Word Vectors 词向量Count-based 基于统计的方法Document 作为上下文 —— 向量空间模型&#xff08;VSM&#xff09;TF-IDF 更加有效的编码方式降维Singular Value Decomposition neighbor words 作为上下文 基于深度学习的方法Word2V…

highlight clock tree 高亮时钟树的方法

当分析clock tree需要在图形界面highlight clock tree时&#xff0c;最朴实无华的方法就是贴报告&#xff0c;除此之外这里也分享一下用命令的方法。 1.Imported Path Pins 1&#xff09;Highlight > Color By > Imported Path Pins 2&#xff09;report_timing icc2…

【MySQL 数据库】9、存储过程

目录 一、存储过程是什么二、存储过程的基本语法三、MySQL 中的变量(1) 系统变量(2) 用户自定义变量(3) 局部变量 四、if 判断五、参数传递和返回值六、case 语句七、while 循环八、repeat 循环九、loop 循环十、游标十一、条件处理程序 一、存储过程是什么 &#x1f331; 存储…

Linux进程间通信【消息队列、信号量】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、消息队列1.1、什么是消息队列&#xff1f;1.2、消息队列的数据结构1.3、消…

交通物流模型 | Python实现基于张量分解的交通流量时空模式挖掘(出租车车载GPS数据、公交卡刷卡数据、POI的分布数据)

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 一般出行行程通常都由某种明确目的驱使,例如上班、购物或娱乐,出行的起始区域因其承担功能的不同,通常能够反映出用户的出行目的,于此同时,从宏观来看,区域之间的交通流量在一天内的变化规律也能够反…

【数据结构与算法】03 队列(顺序队列--循环队列--优先级队列--链队列)

一、概念1.1 队列的基本概念1.2 队列的顺序存储结构1.21 顺序队列&#xff08;静态队列&#xff09;1.22 循环队列1.23 优先级队列 1.3 队列的链式存储结构 二、C语言实现2.1 顺序存储2.11 顺序队列2.12 循环队列2.13 优先级队列 2.2 链式存储 一、概念 1.1 队列的基本概念 队…