题目链接
思路:直接模拟即可,需要注意,排序要用stable_sort()
#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
#include<unordered_map>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<string>
#include<map>
#include<cmath>
#include<bitset>
#define ll long long
#define inf 0x3f3f3f3f
#define bug(a) cout<<"* "<<a<<endl;
#define bugg(a,b) cout<<"* "<<a<<" "<<b<<endl;
#define buggg(a,b,c) cout<<"* "<<a<<" "<<b<<" "<<c<<endl;
using namespace std;
typedef pair<ll,ll> P;
const int N=1e5+10;
const ll mod=1e9+7;
int n,a[N],b[N],c[N],d[N],Ax[N],Bx[N];
ll sum1,sum2,ans1,ans2;
struct node{
int gj,xl,zh;
}va[N],vb[N];
bool cmp1(node x,node y){
return x.zh>y.zh;
}
bool cmp2(node x,node y){
return x.zh<y.zh;
}
int main()
{
cin>>n;
char X;
cin>>X;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
scanf("%d",&b[i]);
for(int i=0;i<n;i++)
scanf("%d",&c[i]);
for(int i=0;i<n;i++)
scanf("%d",&d[i]);
for(int i=0;i<n;i++)
scanf("%d",&Ax[i]);
for(int i=0;i<n;i++)
scanf("%d",&Bx[i]);
vector<node> va,vb;
for(int i=0;i<n;i++){
va.push_back({a[i],b[i],a[i]+b[i]});
vb.push_back({c[i],d[i],c[i]+d[i]});
}
stable_sort(va.begin(),va.end(),cmp1);//用稳定排序stable_sort(),大小相同时不改变初始顺序
stable_sort(vb.begin(),vb.end(),cmp2);
int p1=0,p2=0;
int cnt1=Ax[p1],cnt2=Bx[p2];
node pa,pb;
while(ans1<n&&ans2<n){
if(X=='A'){
vb[cnt2-1].xl-=va[cnt1-1].gj;
sum1+=va[cnt1-1].gj;
cout<<"A"<<" "<<va[cnt1-1].gj<<endl;
if(vb[cnt2-1].xl<=0){
ans2++;
p2++;
cnt2=Bx[p2];
}
X='B';
}
if(X=='B'){
va[cnt1-1].xl-=vb[cnt2-1].gj;
sum2+=vb[cnt2-1].gj;
cout<<"B"<<" "<<vb[cnt2-1].gj<<endl;
if(va[cnt1-1].xl<=0){
ans1++;
p1++;
cnt1=Ax[p1];
}
X='A';
}
}
printf("%lld %lld %lld %lld\n",sum1,sum2,ans1,ans2);
return 0;
}
/*
2
B
1 2
1 1
1 3
3 1
1 2
1 2
*/