| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
用二分法还是WA,不知怎么搞。//My code
#include <iostream>
#include <fstream>
#include <cstdio>
#include <string>
#include <cmath>
using namespace std;
int main()
{
int N, K;
long TLen = 0;
float AveLen = 0.0;
double fOriLen = 0.0;
long nOriLen = 0;
int i;
cin >> N >> K;
int count = 0;
long * cable = new long [N];
long limit = 0;
for (i = 0; i < N; i++)
{
cin >> fOriLen;
nOriLen = floor(fOriLen * 100);
TLen += nOriLen;
cable[count++] = nOriLen;
}
limit = ceil( TLen * 1.0 / count);
long max = 0;
int index = -1;
for (i=0; i<N; i++)
{
if (cable[i] > max )
{
max = cable[i];
index = i;
}
}
int tmp = ceil(K *1.0 /N);
if ((max*1.0 / tmp ) < (1.0*limit))
limit = ceil (max*1.0/tmp);
do{
int sum = 0;
for (i = 0; i < count; i++)
{
sum += floor(cable[i]*1.0 / limit);
}
if (sum == K)
break;
else
limit --;
}
while (1);
printf("%.2f\n", limit*1.0 / 100);
return 0;
}
long TLen = 0;
float AveLen = 0.0;
double fOriLen = 0.0;
long nOriLen = 0;
int i;
cin >> N >> K;
int count = 0;
long * cable = new long [N];
long limit = 0;
for (i = 0; i < N; i++)
{
cin >> fOriLen;
nOriLen = floor(fOriLen * 100);
TLen += nOriLen;
cable[count++] = nOriLen;
}
limit = ceil( TLen * 1.0 / count);
do{
int sum = 0;
for (i = 0; i < count; i++)
{
sum += floor(cable[i]*1.0 / limit);
}
if (sum == K)
break;
else
limit --;
}
while (1);
printf("%.2f\n", limit*1.0 / 100);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator