• Codeforces Round #665 (Div. 2) C. Mere Array 数论,思维


    Codeforces Round #665 (Div. 2) C. Mere Array

    题意

    给定数组(a) ,可以交换(a_i , a_j) 当且仅当$Min | (a_i,a_j) $ ,其中(Min)(a) 数组的最小值

    问能否通过交换使得数组(a) 不降

    分析

    考虑需要交换的元素有哪些?

    建立数组(b) ,对(b) 排序,如果$a_i eq b_i $ ,说明(a_i) 是需要交换的。显然,若(Min) 不能整除这个(a_i) ,则(a_i) 永远没办法交换,直接(return false) 。否则,必然可以通过交换到相应的位置,如何交换?可以不断利用(Min) 作为跳板,具体证明略。

    代码

    ll a[maxn];
    ll b[maxn];
     
    bool solve() {
        vector<ll> v;
        int n = readint();
        ll Min = 1e18;
        for (int i = 0; i < n; i++) a[i] = readll(), b[i] = a[i], Min = min(Min, a[i]);
        sort(b, b + n);
        for (int i = 0; i < n; i++) {
            if (a[i] != b[i]) {
                if (a[i] % Min != 0) return false;
            }
        }
        return true;
    }
     
    int main() {
        int T = readint();
        while (T--) if (solve()) puts("YES");
        else puts("NO");
    }
    
  • 相关阅读:
    php 记录 一些函数语句
    css hack 笔记 for ie8,ie7
    ubuntu 常用 apt更新命令
    JS iframe 跨域
    xdebug配置注意事项
    (matlab)plot画图的颜色线型
    关于iframe中的js跨站
    201202编程笔记
    各种语言中的unix timestamp
    php xml 摘抄
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13546050.html
Copyright © 2020-2023  润新知