p2690.cpp

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

CPP
55
字号
#include <stdio.h>
#include <algorithm>
#define MAXN      100010

using namespace std;

int   N , M , X [MAXN] , Y [MAXN] , c , C , Min , Max;

bool  init ();
bool  check ();

main ()
{
     while ( init () ) {
           if ( !check ()) printf ( "Impossible\n" );
     }
}

bool check ()
{
     if ( X [N - 1] != Y [M - 1] ) return false;
     int  i , j , ti , tj , sum;
     
     for ( i = j = Max = sum = 0; i < N; i ++ ) {
         for ( ; j < M && Y [j] < X [i]; j ++ ) sum += Y [j];
         Max += ( M - j ) * X [i] + sum;
     }
     Max *= C;
     
     Min = 0;
     for ( i = N - 1 , j = M - 1; i >= 0; i -- ) {
         for ( ; j >= 0 && Y [j] > X [i]; j -- ) Min += Y [j];
         if ( X [i] == Y [j] ) j --;
         Min += X [i];
     }
     for ( ; j >= 0; j -- ) Min += Y [j];
     Min *= c;
     
     printf ( "Minimum: %d, maximum: %d\n" , Min , Max );
     return true;
}

bool init ()
{
     scanf ( "%d%d" , &N , &M );
     if ( N == 0 && M == 0 ) return false;
     scanf ( "%d%d" , &c , &C );
     for ( int i = 0; i < N; i ++ ) scanf ( "%d" , &X [i] );
     for ( int j = 0; j < M; j ++ ) scanf ( "%d" , &Y [j] );
     sort ( X , X + N );
     sort ( Y , Y + M );
     return true;
}

⌨️ 快捷键说明

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