题意
有n把枪 m个敌人 每把枪有一个攻击值a[i] 每个敌人有个防御值b[i]
如果a[i]>b[i]可以获得a[i]-b[i]的奖励 求奖励值总和的最大值
思路
最大a - 最小b
代码
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn = 100000 + 10;
int n, m;
int gun[ maxn ], mon[ maxn ];
int main () {
int T;
scanf ( "%d", &T );
while ( T-- ) {
scanf ( "%d%d", &n, &m );
for ( int i = 0; i < n; ++i )
scanf ( "%d", &gun[ i ] );
for ( int i = 0; i < m; ++i )
scanf ( "%d", &mon[ i ] );
sort ( gun, gun + n );
//新函数
reverse ( gun, gun + n );
sort ( mon, mon + m );
//不是ll过不了,数据量的和超过了int
ll sum = 0;
int i = 0;
//边界问题
while ( gun[ i ] > mon[ i ] && i < n && i < m ) {
sum += gun[ i ] - mon[ i ];
++i;
}
printf ( "%lld\n", sum );
}
return 0;
}