# Greedy# Simulation# Math

b119 - 售票系統 (Sales)

🔗 前往 ZeroJudge 原題

題目描述

題目描述了一個航空公司根據訂位比例調整機位價格的策略,要求計算航班的利潤或虧損。給定票面價、機位總數以及訂位紀錄,根據訂位數量計算總收入,再減去成本(票面價的 30%)以得出最終利潤或虧損。

解題思路

此題的核心在於模擬航空公司的售票策略。程式首先讀取票面價 s、機位總數 t 和訂位數量 n。然後,程式遍歷每個訂位紀錄,計算總收入。收入的計算方式是根據訂位數量落在不同的比例區間內,應用不同的折扣率(70%、80%、90% 或 100%)。最後,程式計算總利潤,即總收入減去成本(t * s * 0.3)。

複雜度分析

  • 時間複雜度: O(n),其中 n 是訂位紀錄的數量。程式需要遍歷所有訂位紀錄來計算總收入。
  • 空間複雜度: O(1),程式只使用了幾個常數大小的變數來儲存票面價、機位總數、訂位數量和總收入,因此空間複雜度是常數級別。

程式碼

#include <iostream>
using namespace std;
int main(){
	double s,t,n;
	while(cin >> s >> t >> n){
		double x,sum=0,mon=0;
		while(n--){
			cin >> x;
			sum+=x;
		}
		if(sum>t*0.2){
			mon+=t*0.2*s*0.7;
			sum-=t*0.2;
			if(sum>t*0.2){
				mon+=t*0.2*s*0.8;
				sum-=t*0.2;
				if(sum>t*0.2){
					mon+=t*0.2*s*0.9;
					sum-=t*0.2;
				}
				else{
					mon+=sum*s*0.9;
					sum=0;
				}
			}
			else{
				mon+=sum*s*0.8;
				sum=0;
			}
		}
		else{
			mon+=sum*s*0.7;
			sum=0;
		}
		mon+=sum*s;
		printf("%.0lf\n",mon-t*s*0.3);
	}
}

Discussion