http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2177
題目描述
大家都知道,新生入學的前幾周要體檢,體檢的那一天 HH 早起(九點半)來到了校醫院,但是到了之后她發現排隊等候體檢的人太多了,而且人數在不斷的增加。體檢需要檢查許多個項目,每個項目都需要排隊,而且隨著時間的推移,每個隊列的人數都在慢慢增加。
已知每個體檢項目的隊列都有兩個屬性(ai, bi):
1、如果 HH 在 0 時刻站在了這個隊列后,那么她需要 ai 秒就可以完成這個項目的體檢;
2、如果 HH 沒在這個隊列中,那么 HH 完成這個項目的時間每秒會在 ai 的基礎上增加 bi 秒。
作為一個測肺活量的時候怒吹了 1000+ 的大神,她希望能盡快體檢完畢去吃飯,所以選擇正確的體檢順序是非常非常重要的。
輸入
輸入包含多組測試數據,對于每組測試數據:
輸入的第一行為一個正整數 n(1 ≤ n ≤ 10
5
),代表需要體檢的項目數;
接下來 n 行每行為兩個正整數 a,b(0 ≤ a, b < 1000), 依次代表第1-n個隊列的兩個屬性。
注意:64-bit 整型請使用 long long 來定義,并且使用 %lld 或 cin、cout 來輸入輸出,請不要使用 __int64 和 %I64d。
輸出
輸出完成體檢的最短時間,由于最后結果可能會很大,所以你只要輸出結果對365×24×60×60取余后的結果即可。
示例輸入
2 3 1 2 3 5 1 2 2 3 3 4 4 5 5 6
示例輸出
7 1419
提示
樣例解釋:
第一組樣例,最短時間:HH 先排在第二個隊伍,用時 2 秒體檢完成第二個項目,然后排在第一個隊伍,用時 5 秒完成第一個項目,總用時 7 秒。
第二組樣例,最短時間:HH 按照給定的順序, 用時 1 秒體檢完成第一個項目,用時 5 秒完成第二個項目,用時 27 秒完成第三個項目,用時 169 秒完成第四個項目,用時 1217 秒完成第五個項目,總用時 1+5+27+169+1217=1419 秒。

1 #include<stdio.h> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std ; 6 const int maxn = 100010 ; 7 struct node 8 { 9 int a,b ; 10 double c ; 11 bool friend operator < (node x,node y) 12 { 13 return x.c < y.c; 14 } 15 }ss[maxn]; 16 int main() 17 { 18 int n ; 19 while (cin>> n) 20 { 21 for ( int i = 0 ; i <= n- 1 ; i ++ ) 22 { 23 scanf( " %d %d " ,&ss[i].a,& ss[i].b); 24 ss[i].c = ss[i].a* 1.0 / ss[i].b; 25 } 26 sort(ss,ss+ n); 27 long long sum = ss[ 0 ].a; 28 for ( int i = 1 ; i <= n- 1 ; i ++ ) 29 { 30 sum = (sum+sum*ss[i].b+ss[i].a)%( 365 * 24 * 60 * 60 ); 31 } // 取余這個地方一定不能在輸出那兒取余,因為longlong存不了那么大的........... 32 printf( " %lld\n " ,sum); 33 } 34 return 0 ; 35 }
這個題不是特別難,但是要注意,longlong是存不了太大的數據的
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
