【链表】BZOJ1588: [HNOI2002]营业额统计
生活随笔
收集整理的這篇文章主要介紹了
【链表】BZOJ1588: [HNOI2002]营业额统计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1588: [HNOI2002]營業額統計
Time Limit: 5 Sec??Memory Limit: 162 MBSubmit: 17555??Solved: 7179
[Submit][Status][Discuss]
Description
營業額統計 Tiger最近被公司升任為營業部經理,他上任后接受公司交給的第一項任務便是統計并分析公司成立以來的營業情況。 Tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當復雜的工作。由于節假日,大減價或者是其他情況的時候,營業額會出現一定的波動,當然一定的波動是能夠接受的,但是在某些時候營業額突變得很高或是很低,這就證明公司此時的經營狀況出現了問題。經濟管理學上定義了一種最小波動值來衡量這種情況: 該天的最小波動值 當最小波動值越大時,就說明營業情況越不穩定。 而分析整個公司的從成立到現在營業情況是否穩定,只需要把每一天的最小波動值加起來就可以了。你的任務就是編寫一個程序幫助Tiger來計算這一個值。 第一天的最小波動值為第一天的營業額。 ? 輸入輸出要求
Input
第一行為正整數 ,表示該公司從成立一直到現在的天數,接下來的n行每行有一個整數(有可能有負數) ,表示第i 天公司的營業額。 天數n<=32767, 每天的營業額ai <= 1,000,000。 最后結果T<=2^31Output
輸出文件僅有一個正整數,即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
?
該題數據bug已修復.----2016.5.15
題解
這題雖然是平衡樹的題
但是其實可以用鏈表很快的解決
思路也很簡單,看代碼就能懂。。。
代碼
?
//by 減維 #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<bitset> #include<set> #include<cmath> #include<vector> #include<set> #include<map> #include<ctime> #include<algorithm> #define ll long long #define inf 1<<30 using namespace std;struct list{int to,fr,v,pos; }e[50005];int n,ans;bool cmp(const list&x,const list&y){return x.v<y.v;} bool cm2(const list&x,const list&y){return x.pos<y.pos;}int main() {scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d",&e[i].v),e[i].pos=i;sort(e+1,e+n+1,cmp);for(int i=1;i<=n;++i)e[i].fr=e[i-1].pos,e[i].to=e[i+1].pos;sort(e+1,e+n+1,cm2);for(int i=n;i>=1;--i){int pre=inf,suc=inf;if(e[e[i].fr].pos)pre=abs(e[i].v-e[e[i].fr].v);if(e[e[i].to].pos)suc=abs(e[i].v-e[e[i].to].v);if(e[e[i].fr].pos||e[e[i].to].pos)ans+=min(pre,suc);e[e[i].fr].to=e[i].to;e[e[i].to].fr=e[i].fr;if(i==1)ans+=e[i].v;}printf("%d",ans);return 0; }?
轉載于:https://www.cnblogs.com/rir1715/p/8006754.html
總結
以上是生活随笔為你收集整理的【链表】BZOJ1588: [HNOI2002]营业额统计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js前端和后台数据交互-----前端传字
- 下一篇: IO基本知识