题意
有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; }