p2399_huffman树_数组结构.cpp

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 49 行

CPP
49
字号
#include <stdio.h>
#define  MAXN     500000

int      N , Num1 [MAXN];
long long Num2 [MAXN] , Sum;

void     init ();
void     Work ();

main ()
{
     int total;
     for ( scanf ( "%d" , &total ); total; total -- ) {
         init ();
         if ( N == 1 ) printf ( "%d\n" , Num1 [0] );
         else Work () , printf ( "%lld\n" , Sum );
         if ( total > 1 ) puts ( "" );
     }
}

void Work ()
{
     Sum = 0;
     int  Start1 = 0 , Start2 = 0 , Size2 = 0;
     long long Add;
     
     for ( int i = 1; i < N; i ++ ) {
         Add = 0;
         
         if ( Start1 == N ) Add += Num2 [Start2 ++];
         else if ( Start2 == Size2 ) Add += Num1 [Start1 ++];
         else if ( Num1 [Start1] < Num2 [Start2] ) Add += Num1 [Start1 ++];
         else Add += Num2 [Start2 ++];
         
         if ( Start1 == N ) Add += Num2 [Start2 ++];
         else if ( Start2 == Size2 ) Add += Num1 [Start1 ++];
         else if ( Num1 [Start1] < Num2 [Start2] ) Add += Num1 [Start1 ++];
         else Add += Num2 [Start2 ++];
         Sum += Add; Num2 [Size2 ++] = Add;
     }
     
}

void init ()
{
     scanf ( "%d" , &N );
     for ( int i = 0; i < N; i ++ ) scanf ( "%d" , &Num1 [i] );
}

⌨️ 快捷键说明

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