2 条题解
-
0
由题意可知,我们每次选最小的美丽值苹果,下一次选的苹果美丽值要比上一次大
那最优解就是第一次选择美丽值最小的苹果,之后每一次都选择最小的比上一次美丽值大的苹果
所以我们对数组从小到大排序,然后当前元素是否比上一个元素大,是的话++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
- 上传者