题目传送门
题解
-
每次暴力寻找比 b [ i ] b[i] b[i] 大且没参赛过的最小 a [ j ] a[j] a[j] 值 ( 1 < = i < = n , 1 < = j < = n ) (1<=i<=n,1<=j<=n) (1<=i<=n,1<=j<=n)。时间复杂度 O ( n 2 ) O(n^2) O(n2)。
-
将 a [ i ] a[i] a[i] 和 b [ i ] b[i] b[i] 数组放到一起排序,每次按照最大括号匹配的方式计算。时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)。
AC-Code
#include <bits/stdc++.h>
using namespace std;struct NODE {
bool flag;int val;
}f[1005 << 1];bool cmp(NODE a, NODE b) {
// 返回true调换位置if(a.val != b.val) return a.val < b.val; // 战力值升序else return a.flag; // 田忌的靠后
}int main() {
int t; cin >> t;while(t--) {
int n; cin >> n;for(int i = 0; i < n; ++i) {
cin >> f[i].val;f[i].flag = true;}for(int i = 0; i < n; ++i) {
cin >> f[i + n].val;f[i + n].flag = false;}sort(f, f + n * 2, cmp);int ans = 0, pre = 0;for(int i = 0; i < n * 2; ++i) {
if(f[i].flag == false) ++pre;else if(pre > 0)--pre, ++ans;}cout << ans << endl;}
}