2573.txt

来自「北大ACM题目例程 详细的解答过程 程序实现 算法分析」· 文本 代码 · 共 73 行

TXT
73
字号
Problem Id:2573  User Id:fzk 
Memory:56K  Time:60MS
Language:C  Result:Accepted

Source 

#include"stdio.h"
void px(int *a,int n,int m)
{int s,i=n+1,j=m;
if(n>=m)return;

while(i<j)
{
while(a[n]>=a[i]&&i<j)i++;
while(a[n]<=a[j]&&j>i)j--;

if(a[i]>a[j]){s=a[i];a[i]=a[j];a[j]=s;}
}

if(a[i]>a[n])i--;

s=a[i];a[i]=a[n];a[n]=s;
px(a,n,i-1);
px(a,i+1,m);
}



main()
{int a[1001],total,i,j,k;
long t;
/*while(1)*/
scanf("%d",&total);




for(i=0;i<total;i++)scanf("%d",a+i);

if(total==1){printf("%d\n%d\n",a[0],a[0]);exit(0);}

px(a,0,total-1);

i=total-2;

while(a[i]>2*a[1]-a[0]&&i>=2)i-=2;

i+=2;j=i-1; k=i;

t=0;
for(;i<total-1;i+=2)t+=a[0]+2*a[1]+a[i+1];

for(;j>=1;j--){t+=a[0]+a[j];if(j==1)t-=a[0];}

printf("%ld\n",t);




for(i=k;i<total-1;i=i+2)
{printf("%d %d\n",a[0],a[1]);
printf("%d\n",a[0]);
printf("%d %d\n",a[i],a[i+1]);
printf("%d\n",a[1]);
}
for(i=1;i<k;i++){printf("%d %d\n",a[0],a[i]);
if(i==k-1)break;printf("%d\n",a[0]);
}
}
	


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?