2011年8月11日 星期四

[b119] 售票系統 (Sales)



內容 :
「低利航空公司」因與同業競爭,經常給予預購票大幅折扣。近年來因為油價高漲,經過細算,該公司所飛行的航班必須以票面價售出30%的機位才能打平所有的支出,因此該公司必須減少每張票的折扣數或者提高票面單價,來提昇公司獲利水準。
但是全面提高票價可能會造成客源的流失,因此企畫部門提出了以下的動態調整機位售價的模式:
給定某航段的票面價及機位數,前20%賣出的機位售價為票面價之70%,前21%~40%賣出的機位售價為票面價之80%,前41%~60%賣出的機位售價為票面價之 90%,最後售出的機位則全部為票面價。
請寫一個程式來幫助「低利航空公司」計算每天每班飛航班機的利潤或虧損。
計算過程皆四捨五入至整數。

輸入說明 :

每個測試資料有一行數字,數字之間以空白隔開。第一個整數代表該航班的票面價s, s≦5,000,第二個整數代表機位數t, t ≦ 250,第三個整數n, 0≦ n ≦10 代表該航班共有n 個訂位記錄,後面則有n 個整數,分別代表每個訂位的機位數。當然,所訂的機位總數不會超過t。
輸出說明 :
請輸出飛航該班機的利潤或虧損金額。

範例輸入 :

2000 60 6 5 10 20 14 1 5 
5000 240 5 3 14 14 14 10
範例輸出 :

59600
-164000
出處 :

95北市資訊學科能力競賽


/**********************************************************************************/
/*  Problem: b119 "售票系統 (Sales)" from 95北市資訊學科能力競賽    */
/*  Language: CPP                                                                 */
/*  Result: AC (26ms, 792KB) on ZeroJudge                                         */
/*  Author: diiuuli520 at 2008-07-21 22:30:22                                     */
/**********************************************************************************/


#include <iostream>
using namespace std;
int main()
{
    int ans, s, t, n, ticket, tmp, i, p20, p40, p60;
    while ( scanf("%d%d%d",&s,&t,&n) != EOF ) {
        ticket = 0;
        ans = -int(s*t*0.3+0.5);
        while ( n-- ) {
            scanf("%d",&tmp);
            ticket += tmp;
        }
        p20 = int(t*0.2+0.5);
        p40 = int(t*0.4+0.5);
        p60 = int(t*0.6+0.5);
        for( i = 1; i <= ticket; i++ ) {
            if ( i <= p20 )
                ans += int(s*0.7+0.5);
            else if ( i <= p40 )
                ans += int(s*0.8+0.5);
            else if ( i <= p60 )
                ans += int(s*0.9+0.5);
            else
                ans += s;
            //printf("%.0lf\n",ans);
        }
        printf("%d\n",ans);
    }
    return 0;
}

沒有留言:

張貼留言