记录编号 |
258266 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2015PJ]推销员 |
最终得分 |
100 |
用户昵称 |
再见 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.254 s |
提交时间 |
2016-05-05 13:47:28 |
内存使用 |
1.17 MiB |
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<queue>
using namespace std;
struct node{
int id,val;
node(int _id,int _val):id(_id),val(_val){}
bool operator<(const node &a)const{return a.val>val;}
}now(0,0),lmax(0,0),rmax(0,0);
priority_queue<node> Ql,Qr;
int n,s[100010],a[100010],ans,ndis;
bool vis[100010];
int main()
{
freopen("2015salesman.in","r",stdin);
freopen("2015salesman.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&s[i]);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
Ql.push(node(i,a[i])),Qr.push(node(i,a[i]+s[i]*2));
now=Qr.top();Qr.pop();
ans=now.val;ndis=s[now.id];
vis[now.id]=true;
printf("%d\n",ans);
for(int i=2;i<=n;i++){
while(!Ql.empty()){
lmax=Ql.top();
if(!vis[lmax.id]) break;
Ql.pop();
}
while(!Qr.empty()){
rmax=Qr.top();
if(!vis[rmax.id]) break;
Qr.pop();
}
if(Ql.empty()) lmax.val=-1;
if(Qr.empty()) rmax.val=-1;
if(lmax.val>rmax.val-ndis*2){
Ql.pop();
vis[lmax.id]=true;
ans+=lmax.val;
}
else{
Qr.pop();
vis[rmax.id]=true;
ans+=rmax.val-ndis*2;
ndis=s[rmax.id];
}
printf("%d\n",ans);
}
return 0;
}