首页 > 其他分享 >Codeforces 929 div3 D

Codeforces 929 div3 D

时间:2024-07-25 10:52:11浏览次数:14  
标签:sort int Codeforces 929 while b0 b1 quick div3

题目:D. Turtle Tenacity: Continual Mods
题目链接:https://codeforces.com/contest/1933/problem/D
算法:数论、贪心。

一开始没思路,后面看了别人的题解才搞懂的。

思路:

1.将原数组a从大到小排序后可以得到的数组b有两种情况。一种是b0!=b1,另一种则是b0=b1(下标从0开始)。对于第一种情况并结合样例可以发现在b1!=b2的情况下,数组元素依次取模后结果必然不为0的,此为恒成立。

2.对于第二中情况,若b0=b1,那么b0modb1=0,这将导致最终结果为0,所以我们只需要找到b0之后有无存在一个bi使得bimodb0!=0,有则将其放到b0之前,满足第一种情况。没有则为NO。

详细AC码:

点击查看代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N];
 
void quick_sort(int l, int r)   //快速排序算法
{
	if (l >= r) return;
	int i = l - 1, j = r + 1, x = a[(l + r) >> 1];
	while (i < j)
	{
		do i++;while (a[i] < x);
		do j--;while (a[j] > x);
		if (i < j) swap(a[i], a[j]);
	}
	quick_sort(l, j);
	quick_sort(j + 1, r);
}
int main()
{
	int t, n;
	cin >> t;
	while (t--)
	{
		cin >> n;
		for (int i = 0;i < n;i++)
		{
			cin >> a[i];
		}
		quick_sort(0, n - 1);  //排序
		
		//1.若排序后a1!=a2 取模后结果必不为0
		if (a[0] != a[1])
		{
			cout << "YES" << endl;
			continue;
		}
		else {    //2.
			int flag = -1;
			for (int i = 2;i < n;i++)
			{
				if (a[i] % a[0] != 0)
				{
					flag = 1;
					break;
				}
			}
			if (flag == 1)
			{
				cout << "YES" << endl;
			}
			else {
				cout << "NO" << endl;
			}
		}
	}

	return 0;
}

标签:sort,int,Codeforces,929,while,b0,b1,quick,div3
From: https://www.cnblogs.com/Tree907/p/18322512

相关文章

  • 题解:Codeforces Round 961 (Div. 2) A
    A.Diagonals*timelimitpertest:1secondmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputVitaly503isgivenacheckeredboardwithasideof\(n\)and\(k\)chips.Herealizedthatallthese\(k\)chipsneedto......
  • Codeforces Round 961 (Div. 2)
    ABC没什么,除了B2还没补。主要就是这个D题。这题我基本上需要想到的都想到了,没想到的部分就是记录不合法答案而非直接记录正确答案。其实这思路也有点能够被启发的地方,就是只有某个位置前k个位置是又至少一个数字存在与我们的选择集合里的,我们才能够统计答案。也就是说,如果统计......
  • Codeforces Round 961 (Div. 2)
    A.Diagonals----------------------------题解----------------------------------注意读题,题目中只有i+j相同的格子才是一个对角线,也就是说,(1,1)(2,2)(3,3)的那条大斜线不是个对角线,如图所示这是一个3*3的图中所有的对角线,那么我们只需要如图所示,从中间往两边依次放就可以,......
  • codeforces div_2 961 题解报告
    codeforcesdiv_2961题解报告比赛链接:https://codeforces.com/contest/1995A.Diagonals题目翻译给定一个边长为\(n\)的正方形,给定\(k\),要往正方形选\(k\)个点,\(x+y\)相同的点构成对角线,问至少要几条对角线才能装下\(k\)个点。时限1s,空间限制256MB\(1\len\le100,0\l......
  • Codeforces Round 961 (Div. 2)
    A.JoeyTakesMoney--------------------------题解------------------------------------选取x和y替换掉a[i],a[j],前提是两者乘积相同,最后要求和数组最大,其实很简单,我们只需要不对另x=1y=a[j]*a[x]就行,从左到右遍历整个数组队a[i]和a[i+1]进行此操作,就可以得到我们想要的值......
  • Codeforces Round 961 (Div. 2)
    题目链接:CodeforcesRound961(Div.2)总结:B1wa两发可惜,C出得有点小慢。A.Diagonalsfag:贪心Description:给定一个\(n*n\)的棋盘,给定\(k\)个棋子,每个格子只能放一个棋子,求将棋子全部放入棋盘,至少需要占几条对角线。Solution:求最少占用,显然贪心处理,从最长的对角线开始占用,对......
  • Codeforces Round 961 (Div. 2)
    题目链接:CodeforcesRound961(Div.2)总结:B1wa两发可惜,C出得有点小慢。A.Diagonalsfag:贪心Description:给定一个n∗nn*n......
  • Codeforces Round 961 (Div. 2)
    A#include<bits/stdc++.h>usingnamespacestd;inta[200];voidsolve(){intn,k;cin>>n>>k;a[1]=n;for(intj=n-1,i=2;i<=1+(n-1)*2;i+=2,j--){a[i]=a[i+1]=j;}if(!k){cout<<0<<"\n......
  • Codeforces Round 961 (Div. 2) 补题记录(A~D)
    上大分,赢!A考虑将每一条对角线上可以存放的砝码数量都记录一下,从大到小排序,然后直接暴力贪心选择。此时可以发现数量一定形如\(n,n-1,n-1,n-2,n-2,n-3,n-3,\ldots,1,1\)这样的形式。直接暴力减即可。时间复杂度为\(O(n)\)。#include<bits/stdc++.h>#defineintlonglong......
  • Codeforces 1987C
    codeforcesP1987C给定一个n长度的数组,每一步都要遍历整个数组。如果某个元素是末尾元素或是比其后一个元素大,则该元素减去1直到该元素为0,求解总步数,算法复杂度要求\(O(n)\)先给出暴力解法,复杂度\(O(n^2)\): intt=0; do{ for(inti=0;i<n-1;i++){ if(a[i]......