流量那些事兒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 遞迴注意事項 遞迴雖然經典,但是也有他的缺點 第一 遞迴是反...