流量那些事兒

2021-09-22 20:17:00 字數 3224 閱讀 8450

流量那些事兒

problem description

流量是大家都十分關心的事情,現在小暗接到了乙個小任務,要寫乙個流量計費的系統,其中乙個關於流量使用優先順序的判斷讓他卡得很厲害,於是他來求助你幫他寫。

已知流量使用優先順序順序:

省內流量包>全國流量包>**內省內流量>**內全國流量>**外流量(超出的流量)

使用者初始只有**內流量,省內流量包(型別 1)和全國流量包(型別 2)需要訂購才可擁有,而且可隨時訂購。流量包內包含流量數額和使用期限(即失效時間為訂購時間 + 使用期限)

重複訂購同一種流量包,若在該種流量包有效期內,流量可疊加,有效期順延。

現在給出使用者的一些操作,請你幫助小暗流量計費的計算。

input

第一行輸入使用者所在省份、**內省內流量、**內全國流量,單位為 m,之間用空格隔開。

第二行輸入可訂購的流量包數量 n。

接下來有 n 行,每行輸入一種流量包的資訊:流量包型別、內含流量數額(單位為 m)、有效期(單位為天,天數 >= 1,如果為 -1 則是到使用到月底)

接下來輸入乙個整數,代表使用者運算元 q。

之後每行輸入乙個操作:

u dd-hh:mm p x:在當月 dd 日 hm:mm:00 ~ hh:mm:59 期間,使用者在 p 省使用流量 x b

b dd-hh:mm x:在當月 dd 日 hh:mm:00~hh:mm:59 期間,使用者訂購了流量包 x

q dd-hh:mm x:在當月 dd 日 hh:mm:00~hh:mm:59 期間,使用者查詢指定流量包的餘量資訊

1 <= n <= 100

1 <= q <= 100

省份字串長度不超過 20 個位元組。

保證題中流量包內流量數額和使用者總使用流量的計量單位最大為 g(不超過 1t)。

保證操作按照時間順序輸入,且不含相同的時間。時間均為當月內時間。預設乙個月一共有 28 天。

output

對於每次 q 操作,在一行內輸出流量資訊,保留兩位小數,單位為 m。

如果流量包已過期輸出 0.00。

如果 x 為 0,在一行內輸出餐內省內流量、**內全國流量、**外流量,之間以空格隔開。

sample input

shandong 100 50

31 100 1

2 30 1

2 10 -1

16u 1-12:00 shandong 51200

q 1-12:03 0

b 1-14:00 1

u 1-14:05 zhejiang 1048576

q 1-14:10 0

q 1-14:10 1

b 1-15:00 2

u 1-15:05 zhejiang 1048576

q 1-15:11 2

b 2-10:00 2

u 2-17:45 hebei 1048576

q 2-18:58 1

q 2-18:59 2

b 5-12:00 3

u 27-03:20 guangdong 204800

q 28-20:03 3

sample output

99.95 50.00 0.00

99.95 49.00 0.00

100.00

29.00

0.00

58.00

9.80

hint

資料流量單位進製為 1024。

若在 dd-hh:mm 訂購有效期為 x 天的流量包,則實際有效時間範圍為 [dd-hh:mm, (dd+x)-hh:mm)。

source

blue

文中有兩處細節描寫的有些粗略,導致我並沒有看明白,產生了歧義。

乙個是流量可疊加,有效期順延。

乙個是使用者查詢指定流量包的餘量資訊。

這兩個一組合,那到底還怎麼詢問,我能腦補出來不下三種方式。

**是錯的,但還是紀念一下碼的最長的乙個**。以後再看說不定也就理解題意了。

#include using namespace std;

typedef struct node ty;

int main()

char isp;

long long use;

cin >> q;

while ( q-- )

else

}if ( nowuse>0 )

else }}

if ( nowuse>0 )

else

}if ( nowuse>0 )

else

}if ( nowuse>0 )

}else

else }}

if ( nowuse>0 )

else

}if ( nowuse>0 ) }}

else if ( isp=='b' )

day1 += a[cnt].time;

}else

day1 = day + a[cnt].time;

hour1 = hour;

minute1 = minute;}}

else if ( isp==2 )

day2 += a[cnt].time;

}else

day2 = day + a[cnt].time;

hour2 = hour;

minute2 = minute;}}

}else if ( isp=='q')

else

if ( day1>day || (day1==day&&hour1>hour) || (day1==day&&hour1==hour&&minute1>=minute) )

else

if ( day2>day || (day2==day&&hour2>hour) || (day2==day&&hour2==hour&&minute2>=minute) )

else

if ( isp==0 )

else if ( isp==1 )

else if ( isp==2 ) }}

return 0;

}

鏈結那些事兒

鏈結,就是將不同部分的 和資料收集和組合成為乙個單一檔案的過程,這個檔案可被載入到儲存器中執行。鏈結可以執行於編譯時 compile time 也就是源 被翻譯成機器 時 eg.普通的鏈結器鏈結,以及靜態鏈結庫,由靜態鏈結器鏈結 也可以執行於載入時 例如動態鏈結庫的載入時鏈結 也可以執行於執行時 r...

指標那些事兒

1.野指標 也叫懸擺指標,迷失指標 野指標是導致bug的罪魁禍首之一。對指標呼叫delete後 釋放掉了它指向的記憶體,野指標還是指向原來的位址 如果沒有重新賦值就使用它,將導致難以預料的後果。因為此時操作野指標,它指向的記憶體位址可能已經分配給其他變數在使用了。所以指標在delete之後,如果不再...

遞迴那些事兒

include include include include 求階乘 int fac int n if n 1 求累加 int add int n 求字串長度 int my strlen const char dest int main 遞迴注意事項 遞迴雖然經典,但是也有他的缺點 第一 遞迴是反...