[SDOI2015]权值
生活随笔
收集整理的這篇文章主要介紹了
[SDOI2015]权值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述:
有一個長度為n的實數序列,,下標從1開始,其中第k個位置的實數為p · (sin(a · k + b) + cos(c · k + d) + 2),sin和cos采用弧度制,其中p,a,b,c,d均為給定的整數。你需要從這個序列中選擇兩個位置(可以相同),使前邊的位置上的數字減去后邊的位置上的數字最大。如果選擇了兩個相同的位置,那么差為0.
?
輸入:
一行六個整數p,a,b,c,d,n。
?
輸出:
一行一個實數表示最大的差值,保留六位小數。
?
輸入輸出樣例:
| weight.in | weight.out |
| 100 432 406 867 60 1000 | 399.303813 |
?
數據范圍:
對于30%的數據,1<=p,a,b,c,d<=1000,1<=n<=1000;
對于全部的數據,1<=p,a,b,c,d<=1000,1<=n<=10^6。
?
思路:
可以在線處理,一邊計算,一邊計算次數與前面最小數的差值,時間復雜度O(N)。
var p,a,b,c,d,n,maxx,i:longint;ans,max:real;f,e:array[1..100000000] of real; beginassign(input,'weight.in');assign(output,'weight.out');reset(input);rewrite(output);read(p,a,b,c,d,n);for i:=1 to n dobeginf[i]:=sin(a*i + b) + cos(c * i + d);if f[i]>max thenbeginmax:=f[i];maxx:=i;end;e[i]:=f[maxx]-f[i];if e[i]>ans then ans:=e[i];end;writeln(ans*p:0:6);close(input);close(output); end.
?
轉載于:https://www.cnblogs.com/yangqingli/p/4709746.html
總結
以上是生活随笔為你收集整理的[SDOI2015]权值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 3585: mex( 离线 +
- 下一篇: 听过好听的名字