P11231 [CSP-S 2024] 决斗 题解
原题链接。
这道题之前一直用的是贪心做的,看到一个非常巧妙的转化方法,故记之。
首先原题可以转化为找到最多数量的单调上升子序列。每个满足条件的序列都能经过操作只剩下一个数。
那么可以画出这样的图。

由此可以直观地看出答案即为序列的众数。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
int a[N];
int n, ans;
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
int x; cin >> x;
a[x]++;
}
for(int i = 1; i < N; i++)
if(a[i] > ans) ans = a[i];
cout << ans;
return 0;
}
复杂度 \(O(n + W)\),\(W\) 为值域。

浙公网安备 33010602011771号