[BZOJ 1588][HNOI 2002] 营业额统计
這果然是在那個沒有STL的年代出的題
1588: [HNOI2002]營業額統計
Time Limit:?5 Sec??Memory Limit:?162 MBSubmit:?16648??Solved:?6683
[Submit][Status][Discuss]
Description
營業額統計 Tiger最近被公司升任為營業部經理,他上任后接受公司交給的第一項任務便是統計并分析公司成立以來的營業情況。 Tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當復雜的工作。由于節假日,大減價或者是其他情況的時候,營業額會出現一定的波動,當然一定的波動是能夠接受的,但是在某些時候營業額突變得很高或是很低,這就證明公司此時的經營狀況出現了問題。經濟管理學上定義了一種最小波動值來衡量這種情況: 該天的最小波動值 當最小波動值越大時,就說明營業情況越不穩定。 而分析整個公司的從成立到現在營業情況是否穩定,只需要把每一天的最小波動值加起來就可以了。你的任務就是編寫一個程序幫助Tiger來計算這一個值。 第一天的最小波動值為第一天的營業額。 ? 輸入輸出要求
Input
第一行為正整數 ,表示該公司從成立一直到現在的天數,接下來的n行每行有一個整數(有可能有負數) ,表示第i 天公司的營業額。 天數n<=32767, 每天的營業額ai <= 1,000,000。 最后結果T<=2^31?
Output
輸出文件僅有一個正整數,即Sigma(每天最小的波動值) 。結果小于2^31 。
Sample Input
65
1
2
5
4
6
Sample Output
12HINT
?
結果說明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12
對于這道題只要每處理到一個數據就懟進一個平衡樹然后查前驅后繼就可以水過去w...
$std::set$ 大法好(逃
表示正在籌備OI中的STL教程w(強行刷一波訪問量?(逃))
使用STL的參考代碼:
GitHub
1 #include <set> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <iostream> 6 #include <algorithm> 7 8 const int INF=0x7FFFFFFF; 9 10 int main(){ 11 std::multiset<int> s; 12 std::multiset<int>::iterator iter; 13 int n; 14 int tmp; 15 int sum=0; 16 int delta; 17 scanf("%d",&n); 18 scanf("%d",&tmp); 19 s.insert(tmp); 20 sum+=tmp; 21 for(int i=1;i<n;i++){ 22 delta=INF; 23 scanf("%d",&tmp); 24 s.insert(tmp); 25 iter=s.find(tmp); 26 if(iter!=s.begin()){ 27 --iter; 28 delta=std::min(delta,abs(*iter-tmp)); 29 ++iter; 30 } 31 if(++iter!=s.end()){ 32 delta=std::min(delta,abs(*iter-tmp)); 33 --iter; 34 } 35 sum+=delta; 36 } 37 printf("%d\n",sum); 38 return 0; 39 } Backup日常圖包
?
轉載于:https://www.cnblogs.com/rvalue/p/7280415.html
總結
以上是生活随笔為你收集整理的[BZOJ 1588][HNOI 2002] 营业额统计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java开发软件安装及配置
- 下一篇: css的checkbox样式变化