一道Free Pascal题
发布网友
发布时间:2022-04-28 22:19
我来回答
共1个回答
热心网友
时间:2022-06-24 00:14
Source
Problem Id:1095 User Id:ly621
Memory:24K Time:166MS
Language:Pascal Result:Accepted
Source
var t , w , h : array[ 0..100 ] of Longint ; n , ans , len : Longint ;procere swap( var a , b : Longint );var c : Longint ;begin c := a ; a := b ; b := c ;end;procere qsort( l , r : Longint );var i , j , m : Longint ;begin i := l ; j := r ; m := t[ ( i + j ) >> 1 ] ; repeat while t[ i ] > m do inc( i ); while t[ j ] < m do dec( j ); if i <= j then begin swap( t[ i ] , t[ j ] ); swap( w[ i ] , w[ j ] ); inc( i ); dec( j ); end; until i > j ; if i < r then qsort( i , r ); if j > l then qsort( l , j );end;procere init;var i : Longint ;begin readln( n ); for i := 1 to n do read( t[ i ] ); readln; for i := 1 to n do read( w[ i ] ); readln; qsort( 1 , n ); end;procere put( x : Longint );var son : Longint ;begin inc( len ); h[ len ] := x ; son := len ; while son <> 1 do begin if h[ son >> 1 ] < h[ son ] then begin swap( h[ son >> 1 ] , h[ son ] ); son := son >> 1 ; end else exit; end;end;function get : Longint ;var fa , son : Longint ;begin get := h[ 1 ] ; h[ 1 ] := h[ len ] ; dec( len ); fa := 1 ; son := fa << 1 ; while son <= len do begin if ( son < len ) and ( h[ son + 1 ] > h[ son ] ) then inc( son ); if h[ fa ] < h[ son ] then begin swap( h[ fa ] , h[ son ] ); fa := son ; son := son << 1 ; end else exit; end;end;procere main;var i , j : Longint ;begin j := 1 ; for i := t[ 1 ] downto 1 do begin while t[ j ] = i do begin put( w[ j ] ); inc( j ); end; if len <> 0 then inc( ans , get ); end; writeln( ans );end;begin init; main;end.追问对吗??????????