5.7 每日一题题解

序列排序Ⅱ

涉及知识点:

  • 思维/暴力

solution:

  • \(题目要求相邻且互质的元素才可以互相交换,我们先不考虑相邻\)
  • \(假设n = 6,我们只列出来偶数的相对位置:\)
  • \(假设偶数的相对位置为2,6,4,因为6一定会和4相遇,那么无论如何都无法变成2,4,6\)
  • \(再次假设n = 6,我们只列出来3和6的位置:\)
  • \(假设3和6的相对位置为6,3,同理,无论如何都无法变成3,6\)
  • \(做法已经出来了,我们不需要考虑中间的状态,只需考虑能否转移到最终的状态:\)
  • \(问题转化成:对于第i个值,前面是否有和其不互质,且大于它的数,如果有,答案一定是No\)
  • \(那最暴力的做法,就是对于第i个值,求出它所有的因子,将因子作为参数比较\)
  • \(比如6和3,6的因子包括2,3和6,3的因子只有3,但是3作为因子已经在前面的6出现过,且6>3\)

std:

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
const int maxn = 100005;
int flag[maxn];
int main()
{
	int n,x;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
	    scanf("%d",&x);
	    if(flag[x] > x){
                  printf("No\n");
                  return 0;
              }
              flag[x] = x;
              for(int j=2;j*j<=x;j++){
                  if(x%j == 0){
                      int k1 = j,k2 = x/j;
                      if(flag[k1] > x || flag[k2] > x){
    	                  printf("No\n");
    	                  return 0;
    	              }
    	              flag[k1] = flag[k2] = x;
                  }
              }
	}
	printf("Yes\n");
	return 0;
}
posted @ 2020-05-07 09:25  QFNU-ACM  阅读(61)  评论(0编辑  收藏  举报