马上就要放暑假了!
张老师把黄老师,石老师,王老师叫到一起打牌,他们决定用打牌的方式选出一个赢家,负责安排暑假所有人的工作内容。
打牌的规则很简单,每个人手里有一些牌,牌上有一些点数,每一轮由张老师先打出一张牌,然后另外三人可以不出牌,但是要出牌则只能打出点数 严格大于 这张牌的牌,直到张老师手里打完牌后,游戏结束。
每个人最终的得分由打出的所有牌点数之和决定。现在石老师和王老师已经打完了自己的所有牌,张老师还剩下 n 张牌,黄老师还剩下 m 张牌。
张老师决定和黄老师私下进行了合作——只要张老师帮助黄老师成为赢家,那么黄老师就不给张老师安排任何工作!
现在张老师想知道,对于剩下的这些牌,怎么出牌可以让黄老师获得尽可能大的得分?
输入
第一行包含两个整数 n,m 含义如题
第二行 n 个整数 Ai ,表示张老师手里每张牌的点数。
第三行 m 个整数 Bi,表示黄老师手里每张牌的点数。
输出
输出一行,表示在剩下的这些牌中,黄老师能获得最大的得分。
输入样例 1
3 4
3 4 7
1 2 4 8
输出样例 1
12
数据范围:
1≤n,m≤105,1≤Ai,Bi≤109
MY Code:
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=1e5+5;
long long n,m,ans;
int a[N],b[N];
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) cin>>a[i];
for(int i=1; i<=m; i++) cin>>b[i];
sort(a+1,a+1+n);
sort(b+1,b+1+m);
int t=1;
for(int i=1; i<=m; i++) {
if(b[i]>a[t]) ans+=b[i],t++;
}
cout<<ans<<endl;
return 0;
}
求调试,有2个关注。