Senior's Gun
Accepts: 235
Submissions: 977
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
学姐姐是一个酷酷的枪手。 她常常会随身携带n 把枪,每把枪有一个攻击力a[i] 。 有一天她遇到了m 只怪兽,每只怪兽有一个防御力b[j] 。现在她决定用手中的枪消灭这些怪兽。 学姐姐可以用第i 把枪消灭第j 只怪兽当且仅当b[j]≤a[i] ,同时她会获得a[i]−b[j] 的分数。 每把枪至多只能使用一次,怪兽死后也不会复活。现在学姐姐想知道她最多能得到多少分(她可以不用消灭所有的怪兽)。
输入描述
第一行包含一个整数T ,表示测试数据组数。 对于每组测试数据: 第一行包含两个整数n,m ,表示枪的数量和怪兽的数量。 第二行包含n 个整数a[i] ,表示枪的攻击力。 第三行包含m 个整数b[j] ,表示怪兽的防御力。1≤n,m≤100000 ,−109≤a[i],b[j]≤109 。
输出描述
对于每组测试数据,输出一个整数表示对应的答案。
输入样例
1 2 2 2 3 2 2
输出样例
1
发现还是真真正正的比赛锻炼思考的能力,就算是一些小型的比赛。头脑要保持冷静啊光速小子,cmp也写错,关键是还加进了两个sort里面,你当时的头 是有多混乱你告诉我。。。
这题就是贪心,用最狠的武器挑最软的柿子捏啊,没什么好说的。整个贪一遍,就AC了。。。就这么简单。。。也不要总把第二题想象得有多难。。。。。
代码:
#include <iostream> #include <string> #include <cstring> #include <algorithm> #include <cmath> using namespace std; int a[100005]; int b[100005]; bool cmp(int a,int b) { return a>b; } int main() { int Test; int gun_num,guai,i,j; long long ans; cin>>Test; while(Test--) { ans=0; cin>>gun_num>>guai; for(i=1;i<=gun_num;i++) cin>>a[i]; for(i=1;i<=guai;i++) cin>>b[i]; sort(a+1,a+gun_num+1,cmp); sort(b+1,b+guai+1); i=1;j=1; while(i<=gun_num&&j<=guai) { if(a[i]-b[j]>0) ans += a[i]-b[j]; i++; j++; } cout<<ans<<endl; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。