2013年11月7日 星期四
[ZJ] a834: 4、卡牌游戏
#include<stdio.h>
#include<vector>
#include<list>
#include<algorithm>
using namespace std;
struct P{
int t,x;
};
vector<int> A;
vector<P> C,D;
int cmp(P a,P b){
if(a.x!=b.x) return a.x<b.x;
return a.t<b.t;
}
char s[10];
int arr[100005],sta[200005],fnt=0,bak=0;
int main(){
int n,m,x,y,i,j,l,r,add=0;
long long int ans=0,p=0,k=0;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++){
scanf("%s %d",s,&x);
if(s[0]=='A') A.push_back(x),C.push_back((P){1,x});
else C.push_back((P){3,x});
}
D=C;
for(i=0;i<m;i++)
scanf("%d",&arr[i]),C.push_back((P){2,arr[i]});
sort(A.begin(),A.end());
sort(C.begin(),C.end(),cmp);
sort(D.begin(),D.end(),cmp);
for(i=C.size()-1;i>=0;i--){
if(C[i].t==1 && fnt!=bak)
p+=sta[fnt++]-C[i].x,add++;
if(C[i].t==3 && fnt!=bak && sta[bak-1]>C[i].x) bak--,add++;
if(C[i].t==2) sta[bak++]=C[i].x;
}
/*for(i=0,l=0,r=m-1;i<D.size();i++){
if(C[i].t==1 && fnt!=bak)
k+=arr[fnt++]-C[i].x,add++;
if(C[i].t==2 && fnt!=bak && sta[bak-1]>C[i].x) bak--,add++;
}*/
while(add==n && fnt!=bak)
p+=sta[fnt++];
sort(arr,arr+m);
l=0,r=m-1;
for(i=0;i<A.size() && r>=0 && arr[r]>=A[i];i++)
ans+=arr[r--]-A[i];
if(ans>p)
printf("%lld\n",ans);
else printf("%lld\n",p);
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言