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 + -
显示快捷键?