问题描述:
设磁盘上有n个文件,f1,f2,…,fn,,每个文件占磁盘上1个磁道。这n个文件的检索概率分别是p1,p2,…,pn,且p1+p2+…+pn =1。磁头从当前磁道移到被检信息磁道所需的时间可用这2个磁道之间的径向距离来度量。如果文件pi存放在第i道上,1<i<n ,则检索这n 个文件的期望时间是 ∑(Pi*Pj*d(i,j)) ,其中 d(i,j)是第i道与第j道之间的径向距离|i-j|。
代码:
1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 using namespace std; 5 const int maxn=100; 6 int A[maxn]; 7 int B[maxn]; 8 9 double f(int n) 10 { 11 double sum = 0,t = 0; 12 int k = (n-1)/2; 13 sort(A,A+n); 14 B[k] = A[n-1]; 15 16 for(int i = k+1;i < n;i++) 17 { 18 B[i] = A[n-2*(i-k)]; 19 } 20 for(int i = k-1;i >= 0;i--) 21 { 22 B[i] = A[n-2*(k-i)-1]; 23 } 24 for (int i = 0;i < n;i++) 25 { 26 sum += A[i]; 27 for(int j = i+1; j < n;j++) 28 t += B[i]*B[j]*(j-i); 29 } 30 return t/sum/sum; 31 } 32 33 int main() 34 { 35 int i ,n; 36 cin>>n; 37 for(i = 0;i < n;i++){ 38 cin>>A[i]; 39 } 40 double ans=f(n); 41 cout<<ans<<endl; 42 return 0; 43 }
输入示例:
5
33 55 22 11 9
输出示例:
0.547396