题解 | #1012.Equalize the Array# 2023杭电暑期多校10

1012.Equalize the Array

签到

题目大意

定义一个数组的 m o d e mode mode 是其中出现次数最多的数字(可不唯一)
给定一个数组 a a a ,每次操作可以选定其一个 m o d e mode mode 并使数组中所有与之相等的元素 + 1 +1 +1
问任意次操作后能否使数组中全部元素相等

解题思路

如果数组中最小的元素是 m o d e mode mode ,连续操作最小元素即可实现//
元素计数,判断最小元素出现次数是否最多即可

时间复杂度

O ( n log ⁡ n ) O(n\log n) O(nlogn)

参考代码

参考代码为已AC代码主干,其中部分功能需读者自行实现

void solve()
{
    ll n;cin >> n;
    map mp;ll t;
    FORLL(i,1,n){
        cin >> t;mp[t]++;
    }
    ll mxcnt=0,mxi=0,mn=0;
    FORLL(i,1,n){
        t=mp[i];if(!mn&&t) mn=i;
        if(t>mxcnt) {mxcnt=t;mxi=i;}
    }
    if(mxi<=mn) cout << YES;
    else cout << NO;
}

你可能感兴趣的:(2023杭电多校,c++)