河南省第十二屆ACM省賽 D地鐵1號線

2021-09-23 22:25:20 字數 1399 閱讀 1839

看到省賽的原題已經上傳至nyoj了,準備重溫一下

某市1號地鐵線, 每天6:00 從始發站發出第一趟地鐵,以後每隔

m分鐘發出下一趟,直到晚上22:00發出當日最後一趟地鐵。

經過執行 x

年的資料分析發現,每趟地鐵的車票收入與它的起發時間有一定關聯。比如:6:00發出的地鐵,由於坐車人數少,一趟下來車票收入為4.50千元;8:00發出的地鐵,由於坐車人多,一趟下來車票收入為12.00千元。不同段時間內起發的地鐵,車票收入滿足不同的線性關係。

第一行: t表示以下有t組測試資料( 1≤ t ≤ 8 )

對每組資料,第1行有兩個整數 m n ,接下來有n行,每行兩個資料,格式為: hh:mm x 分別表示發車時間和車票收入。其中: 10≤ m ≤ 60 1 ≤ n ≤ 100 0.00 ≤ x ≤ 100000.00

對每組測試資料,輸出乙個實數,1號地鐵線一天的車票總收入。(精確到小數點後2位)
1

60 3

06:00 4.50

08:00 12.00

22:00 12.00

192.75
這題有個挖坑的地方就是6點和12點不一定是發車始終時間,發車始終時間需要從輸入資料中獲取,分別是最小和最大時間點。

關於收益,如果在輸入的時間點上,那麼收益就是對應的輸入資料。對於不在時間點上的收益,可以採用斜率計算,比如樣例中

06:00(4.50)到08:00(12.00)之間存在時間點7:00發車,轉換成分鐘就是420分發車,位於360與480分鐘的區間,收益計算為

4.50+(420-360)*(12.00-4.50)/(480-360),這類似於給定兩點求出一次函式,然後計算其中某點的函式值f(x)。

**如下:

#include #include #include #include using namespace std;

void slove(int step,int time)

sort(vec.begin(),vec.end());//時間點排序

double fee=0.0;//總收益

int base=0;//時間所在區間標記

for(int i=vec[0];i<=vec[time-1];i+=step)

} if(i==vec[base])

return(0);

}

tips:nyoj這題的樣例似乎是傳錯了,導致這題無法ac(但是演算法可以保證是對的,因為比賽現場這題我通過了)

2019河南省第十二屆ACM省賽之旅

今年的省賽對我們學校來說真心不爽,畢竟去年我們還抱了金獎回來,結果今年毫不留情的給我們潑了一盆帶冰涼水,拿的都是銅獎,搞得回去路上的氣氛都怪怪的,比賽結束後的我也感覺要被自己菜哭了,本來想著這可能是我最後一次參加省賽了,一定要抱個獎回去,結果撐死都沒想到全場最簡單的簽到題a題居然給我wa了6次,都快...

第十二屆河南省acm省賽熱身賽a題

題意 乙個不超過100位的大整數,去掉其中k位之後剩餘的數按照原來的順序組合成新的整數,求新的整數最小的值為多少 例如 45602 去掉兩位,結果為402,12045 去掉兩位 結果為45 新數前導零刪除 10204055 去掉三位 結果為55 思路 將刪除k位轉換成從原來的整數n位中取 n k位 ...

2019河南省第十二屆ACM省賽參賽後感

大一萌新一枚,在省賽前我們就已經準備好打鐵的準備了,其實原來是想爭銀保銅的,畢竟學院一直沒有拿過比銀更高的獎了,據說打這玩意對找工作有很大幫助。於是陰差陽錯的加了學校的社團。陰差陽錯的混到了前幾。由於才大一,對資料結構也不是很了解 學過一點依然很菜 於是找了大三學 da 長 lao 助陣,賽前瘋狂刷...