CODEFORCES PROBLEMEST 378QAQ and Mocha‘s Array(好题,很提升思维)

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Mocha likes arrays, so before her departure, 378QAQ gave her an array a𝑎 consisting of n𝑛 positive integers as a gift.

Mocha thinks that a𝑎 is beautiful if there exist two numbers i𝑖 and j𝑗 (1≤i,j≤n i≠j) such that for all k𝑘 (1≤k≤n), ak𝑎𝑘 is divisible†† by either ai𝑎𝑖 or aj𝑎𝑗.

Determine whether a𝑎 is beautiful.

†† x is divisible by y if there exists an integer z such that 𝑥=𝑦⋅𝑧.

Input

Each test contains multiple test cases. The first line contains the number of test cases t𝑡 (1≤t≤500). The description of the test cases follows.

The first line of each test case contains a single integer 𝑛 (3≤n≤10^5) --- the length of the array a.

The second line of each test case contains n𝑛 integers a1,a2,...,an (1≤ai≤10^9) --- the elements of the array a.

It is guaranteed that the sum of n over all test cases does not exceed 10^5.

Output

For each test case, output "Yes" if array a𝑎 is beautiful, and output "No" otherwise.

You can output "Yes" and "No" in any case (for example, strings "yEs", "yes", "Yes" and "YES" will be recognized as a positive response).

这道题大致意思是:给定一个数组选取两个数a[i]、a[j],是否数组的任意数可以整除a[i]或a[j],如果是输出"Yes",不是就输出"No"

这道题其实没那么难也没那么简单,一眼看上去感觉非常好写,但真正上手写又会有一些问题

思路就是:找出数组的最小值,遍历数组,每个数都除以最小值,如果能整除跳过,不能就放到arr数组里面待定,如果arr的长度为0说明全部能整除,直接输出"Yes",不是的话就找出arr数组的最小值,然后在进行一次相同的操作,最后判断是输出"Yes"还是"No"

代码如下:

cpp 复制代码
​
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

const int MAXN = 1e5 + 5;
int a[MAXN];
int t,n;

int main()
{
	cin >> t;
	while(t--){
		cin >> n;
		int flag = 0;
		for(int i=1;i<=n;i++){
			if(a[i] == 1) flag = 1;
			cin >> a[i];
		}
		if(flag){
			cout << "Yes" << endl;
			continue;
		}
		sort(a+1,a+n+1);
		int k = a[1];
		vector<int> arr;
		for(int i=2;i<=n;i++){
			if(a[i] % k != 0) arr.push_back(a[i]);
		}
		if(int(arr.size()) == 0) cout << "Yes" << endl;
		else{
			int fl = 1,g = arr[0];
			for(int i=1;i<int(arr.size());i++){
				if(arr[i] % g != 0) fl = 0;
			}
			if(fl) cout << "Yes" << endl;
			else cout << "No" << endl;
		}
	}
	return 0;
}

​

加油

相关推荐
10001hours15 小时前
初阶数据结构.1.顺序表.通讯录项目(只有源码和注释)
数据结构·算法
Emilia486.17 小时前
八大排序算法
算法·排序算法
blammmp17 小时前
算法专题十九:记忆化搜索(暴搜->记忆化搜索)
算法·深度优先·记忆化搜索
纵有疾風起17 小时前
C++—string(1):string类的学习与使用
开发语言·c++·经验分享·学习·开源·1024程序员节
MicroTech202518 小时前
边缘智能的创新:MLGO微算法科技推出基于QoS感知的边缘大模型自适应拆分推理编排技术
科技·算法·ai
王哈哈^_^20 小时前
【数据集】【YOLO】目标检测游泳数据集 4481 张,溺水数据集,YOLO河道、海滩游泳识别算法实战训练教程。
人工智能·算法·yolo·目标检测·计算机视觉·分类·视觉检测
巴里巴气20 小时前
第73题 矩阵置零
线性代数·算法·矩阵
voice67020 小时前
密码学实验二
算法·密码学·哈希算法
Blossom.11821 小时前
把AI“编”进草垫:1KB决策树让宠物垫自己报「如厕记录」
java·人工智能·python·算法·决策树·机器学习·宠物
寂静山林21 小时前
UVa 10989 Bomb Divide and Conquer
算法