原題:http://172.20.23.234/JudgeOnline/showproblem?problem_id=1079
已知每個執行緒從指定的位置開始并順序下載后面的內容,當到達一個已經下載的位置時執行緒停止,假設在下載程序中的速度恒定不變。現在給出檔案的大小(KB),每個執行緒開始的位置(百分比)和下載速度(KB/秒),我想知道需要多長時間能完成下載。
Input
開始一個數字T (T<=100),表示資料的組數。
每組資料以兩個整數開始,N(1<=N<=100000)表示執行緒的個數,M(0 < M <= 10^9)表示檔案的大小。
然后N行,每行有兩個小數,起始位置百分比P (0 <= P < 100),執行緒的下載速度 V (0 < V <= 10000)。輸入保證至少有一個執行緒的起始位置為0, 并且每個執行緒的起始位置不同。
Output
每組資料輸出一行,格式為 “Case #c: K” c 表示樣例組數,K表示需要的下載時間,保留兩位小數。
Sample Input
2
2 1000
0 50
50 40
3 59644
0 35
90 64
50 100
Sample Output
Case #1: 12.50
Case #2: 852.06
我的代碼如下:
#include<iostream>
#include<iomanip>
#include<math.h>
using namespace std ;
void main()
{
int T;
double *p,*v;
cin>>T;
int N,M;
double max;
for(int i=1;i<=T;i++)
{
double n=0;
double m=0;
max=0;
cin>>N>>M;
p=new double[N];
v=new double[N];
for(int y=0;y<N;y++)
{
cin>>p[y]>>v[y];
}
for(int j=1;j<=N-1;j++)
{
for(int k=0;k<N-j;k++)
{
if(p[k]>p[k+1])
{
m=p[k+1];
p[k+1]=p[k];
p[k]=m;
n=v[k+1];
v[k+1]=v[k];
v[k]=n;
}
}}
double r=M/100.0;
for(int x=1;x<N;x++)
{
double q=(r*(p[x]-p[x-1]))/v[x-1];
max=q>max?q:max;
if(x==N-1)
{
double l=r*(100-p[x])/v[x];
max=l>max?l:max;
}
}
cout<<"Case#"<<i<<":"<<fixed<<setprecision(2)<<max<<endl;
}
}
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/78719.html
標籤:基礎類
上一篇:求大神幫助,vs出現問題完全不會
