ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1184. Cable Master

Here it is:

#include<iostream.h>
#include<stdio.h>

int  n, k;
long x[10000];

void main()
{
double xx;
int i, j;
    cin>>n>>k;
    for (i=0; i<n; i++)
    {
        cin>>xx;
        x[i] = xx*100;
    }
long l, r, m, w;
    r = x[0];
    for (i=1; i<n; i++)
        if (x[i]>r) r=x[i];
    l = 1;
    w = 0;
    while ( l <= r )
    {
        m = (l + r) / 2;
        j = 0;
        for (i=0; i<n; i++)
              j = j + (long)x[i]/m;
        if ( j == k )
        {
            w = m;
        }
        if (j >= k)
            l = m + 1;
        else
            r = m - 1;
    }
double ans = (double)w/100.0;
    printf("%.2f\n",ans);
}
ECUST Multistar Two mistake. [2] // Problem 1184. Cable Master 28 May 2002 11:42
I'm not good at C++.
I like Dephi and C more than C++.
But I had correct your program...
Do you have E-mail?
I'll send it to you
Could you explain me why x[i] = (long)(x*100 + 0.1), how did you know
0.1??
Thanks :)
ECUST Multistar HeHe:) // Problem 1184. Cable Master 30 May 2002 16:41
We can try to this code.
double n=2.01;
long x;
x=(long)(x*100);
I was surprised that the result is 200?
I can't understood it also.

Then this code

double n=2.01,t;
long x;
t=n*100;
x=(long) t;
You can find out that
  t=201.00000
but
  x was still 201.
So I use (n*100+0.1) instead Then I use your program to got AC

By the way .
I like C more than C++ beacuse I don't kown C++ well

If I made any mistake in this problem please forgive me.:-)
Good luck.
ECUST Multistar Two mistakes // Problem 1184. Cable Master 28 May 2002 11:56
Well......
The first error is
x[i] = xx*100;
You should have replaced the line to
x[i]=(long)(xx*100+0.1);
Try the testcase
4 4
2.01
2.01
2.01
2.01
Your program output a wrong answer
2.00
:-)

The second one

Why do you think that the cable must be cut into exactly k pieces?
So you must change

    if ( j == k )
        {
            w = m;
        }

into



  if (j>=k && w>m)
    {w=m;}