2 条题解

  • 0
    @ 2026-9-27 3:39:04

    由题意可知,我们每次选最小的美丽值苹果,下一次选的苹果美丽值要比上一次大
    那最优解就是第一次选择美丽值最小的苹果,之后每一次都选择最小的比上一次美丽值大的苹果
    所以我们对数组从小到大排序,然后当前元素是否比上一个元素大,是的话++sum即可(此方法时间复杂度为O(nlogn),高于桶排法)

    #include<bits/stdc++.h>
    #define endl '\n'
    #define int long long
    #define rep(i,l,r) for(int i=l;i<=r;i++)
    using namespace std;
    
    signed main() {
      ios::sync_with_stdio(false);
      cin.tie(nullptr);
    
      int t;
      cin>>t;
      while(t--){
        int n;
        cin>>n;
        vector<int> num(n+1);
        for(int i=1;i<=n;i++) cin>>num[i];
        sort(num.begin(),num.end());
        int sum=0;
        for(int i=1;i<=n;i++){
          if(num[i]>num[i-1]) ++sum;
        }
        cout<<sum<<endl;
      }
    }
    

    信息

    ID
    1164
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    183
    已通过
    52
    上传者