1 条题解
-
0
C :
#include <stdio.h> #include <stdlib.h> #define maxn 30001 #define swap(A,B,C) (C)=(A),(A)=(B),(B)=(C) int A[maxn]; int N; void adjust_down(int i, int n){ int s=A[i]; for(int j = 2*i;j <= n; j *= 2){ int temp; if(A[j]>A[j+1]&&j<n) j++; if(s<=A[j]) break; swap(A[j],A[j/2],temp); } } int proc(){ int WPL=0; for(int i = N/2;i >= 1; i--){ adjust_down(i, N); } int n = N; while(n>1){ int temp; swap(A[1],A[n],temp); n--; adjust_down(1,n); // int x=A[1],y=A[n+1]; A[1] += A[n+1]; WPL += A[1]; adjust_down(1,n); } return WPL; } int main() { scanf("%d",&N); for(int i = 1;i <= N; i++){ scanf("%d",&A[i]); } int wpl= proc(); printf("%d\n",wpl); return 0; }C++ :
#include<iostream> #include<algorithm> using namespace std; int a[30005]; int main() { int n,ans=0; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; make_heap(a,a+n,greater<int>()); for(int i=n;i>1;i--) { pop_heap(a,a+i,greater<int>()); pop_heap(a,a+i-1,greater<int>()); a[i-2]+=a[i-1]; ans+=a[i-2]; push_heap(a,a+i-1,greater<int>()); } cout<<ans<<endl; return 0; }Pascal :
program p26785; var a:array[0..10000] of longint; n,total:longint; i:integer; procedure swap(var a,b:longint); var t:integer; begin t:=a; a:=b; b:=t; end; procedure quick_sort(m,n:integer); var i,j,x:integer; begin i:=m; j:=n; x:=a[(i+j) div 2]; repeat while a[i]>x do inc(i); while x>a[j] do dec(j); if i<=j then begin swap(a[i],a[j]); inc(i); dec(j); end; until i>j; if m<j then quick_sort(m,j); if i<n then quick_sort(i,n); end; procedure insert_sort(n:integer); var i,j:integer; begin i:=n-1; a[0]:=a[n]; while a[i]<a[0] do begin a[i+1]:=a[i]; dec(i)end; a[i+1]:=a[0] end; begin readln(n); for i:=1 to n do read(a[i]); quick_sort(1,n); for i:=1 to n-1 do begin a[n-i]:=a[n-i]+a[n-i+1]; a[n-i+1]:=0; inc(total,a[n-i]); insert_sort(n-i) end; writeln(total); end.
- 1
信息
- ID
- 1083
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者