poj 2573 Wa Wa Wa 不知为何 留个纪念
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
using namespace std;
int a[1001],n;
int g(int *b,int l,int h)
{
int i=l,j=l-1,x=b[h];
for(;i<h;++i)
{
if(b[i] < x)
{
++j;
int temp = b[j];
b[j] = b[i];
b[i] = temp;
}
}
b[h] = b[j+1];
b[j+1] = x;
return j+1;
}
void s(int *b,int l,int h)
{
if(l<h)
{
int mid = g(b,l,h);
s(b,l,mid-1);
s(b,mid+1,h);
}
}
int cross1()
{
int sum=0,t1,t2;
int total = n;
while(total>=4)
{
t1 = a[2]+a[1]+a[total]+a[2];
t2 = a[total]+a[1]+a[total-1]+a[1];
if(t1<t2) sum+=t1;
else sum+=t2;
total-=2;
}
if(total == 2)
sum += a[2];
else
sum += a[1]+a[2]+a[3];
return sum;
}
void cross2()
{
int t1,t2;
int total = n;
while(total>=4)
{
t1 = a[2]+a[1]+a[total]+a[2];
t2 = a[total]+a[1]+a[total-1]+a[1];
if(t1<t2) printf("%d %d\n%d\n%d %d\n%d\n",a[1],a[2],a[1],a[total-1],a[total],a[2]);
else printf("%d %d\n%d\n%d %d\n%d\n",a[1],a[total],a[1],a[1],a[total-1],a[1]);
total-=2;
}
if(total == 2)
printf("%d %d\n",a[1],a[2]);
else
printf("%d %d\n%d\n%d %d\n",a[1],a[3],a[1],a[1],a[2]);
}
int main()
{
scanf("%d",&n);
memset(a,0,sizeof(a));
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
s(a,1,n);
printf("%d\n",cross1());
cross2();
return 0;
}