题目:赛马
来源:“科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)
解题思路
题目:给定两个含有 n
个元素的数组 a
和 b
,两者元素一一对应,求最多有多少对 (a[i], b[j])
,使得 a[i] > b[j]
。
对两个数组进行排序,使用 i
和 j
分别指向两个数组的元素,如果 a[i] > b[j]
,结果加 1,将 i
和 j
后移;否则只移动 i
。
C++代码
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(){ int t; cin >> t; while(t){ int n; cin >> n; vector<int> a(n); vector<int> b(n); for(int i=0; i<n; ++i) cin >> a[i]; for(int i=0; i<n; ++i) cin >> b[i]; sort(a.begin(), a.end()); sort(b.begin(), b.end()); int ans = 0; int i = 0, j = 0; while(i < n){ if(a[i] > b[j]){ ++ans; ++i; ++j; } else{ ++i; } } cout << ans << endl; --t; } return 0; }