您的位置:首页 > Web前端

1724: [Usaco2006 Nov]Fence Repair 切割木板

2018-02-26 15:12 281 查看
题目链接

题目大意:合并果子

题解:水题陶冶身心

我的收获:23333

#include <iostream>
#include <algorithm>
using namespace std;

const int M=50005;

int l1=1,r1=0,l2=1,r2=0;
int n,a[M];
int q1[M],q2[M];

int solve()
{
if(l1>r1) return q2[l2++];
if(l2>r2) return q1[l1++];
if(q1[l1]<q2[l2]) return q1[l1++];
else return q2[l2++];
}

void work()
{
int x,y;long long ans=0;
for(int i=1;i<n;i++){
x=solve(),y=solve();
ans+=x+y;
while(l2<=r2&&x+y<q2[r2]) r2--;
q2[++r2]=x+y;
}
cout<<ans<<endl;
}

void init()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++) q1[++r1]=a[i];
}

int main()
{
init();
work();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: