Page 1 of 1

11093 - Just Finish it up

Posted: Mon Sep 11, 2006 3:50 pm
by vinay
I solved it in 1.6 seconds...
My algo...

1) see if total sum of qi-pi > 0 return " not possible...
2) otherwise start with each "potential node" from 1 to n and see if
sum does not become positive in between ..
3) the moment u find the first i satisfying (2) print i..

Can it be made faster by some nice idea incorporated or its just fine...

My algo seems to be O(n^2) ...
Is there any O(n) algo possible, may be by adding some greedy aproach...

Thanks in advance... :lol:

Posted: Mon Sep 11, 2006 5:19 pm
by Cho
O(n^2) algorithm runs in 1.6s??
Mine is O(n), but it takes 1.555.

@cho

Posted: Mon Sep 11, 2006 5:33 pm
by vinay
I have explained my algo...
Isn.t it O(n^2)...

because in case there is a solution possible .. I start from each node and see I don't encounter any state where my sum (qi-pi) from that node becomes positive..
This in worst case goes on for all n stations .. so O(n^2)...

Could u pm me ur algo or give some idea of ur O(n) algo...

btw I used scanf and printf, may be that caused some improved time..

Re: 11093 - just finish it up

Posted: Mon Sep 11, 2006 6:56 pm
by Cho
vinay wrote:2) otherwise start with each "potential node" from 1 to n and see if sum does not become positive in between ..
What node is a "potential node"?
vinay wrote:Could u pm me ur algo or give some idea of ur O(n) algo...
Think about the linear time solution of finding maximum contigious subarray sum.

Posted: Mon Sep 11, 2006 8:33 pm
by StatujaLeha
I don't understand one thing.
First example:
5
1 1 1 1 1
1 1 2 1 1
Why I cannot finish lap from station 4? I can get 1 gallon of petrol at station 4. It's enough to go to station 5. At station 5 I can get 1 gallon of petrol and finish lap.

Posted: Mon Sep 11, 2006 8:42 pm
by Cho
If you start at station 4, you have to go back to station 4 to finish the lap.

Posted: Mon Sep 11, 2006 8:49 pm
by StatujaLeha
Cho wrote:If you start at station 4, you have to go back to station 4 to finish the lap.
Thanks, I have understood.

Re: 11093 - just finish it up

Posted: Tue Sep 12, 2006 6:40 pm
by vinay
[quote="Cho"]
What node is a "potential node"?
[quote]

potential node is one for which qi-pi is <=0 :wink:

well I have found the linear time algo...
Let me give it a try....

I think the judge's data isn't strong enough to differantiate between a O(n^2) and O(n) algo...

Checking that the total sum of qi-pi over all stations wasn't >0 so that the solution existed was enough ...
That I had done and so acc in 1.6 seconds :P

Posted: Tue Sep 12, 2006 10:40 pm
by kp
I solved it in O(n) as follows:

1. Starting from any station (let's call it START) and trying to finish the lap. If it's possible then goto print answer, else let's say I couldn't get from p to p+1.

2. Starting from p+1 and trying to finish lap. (I don't need to look for the path starting from intermediate stations!).

It repeats until path is found or p+1 > START. Thus it's O(n).

Posted: Thu Sep 14, 2006 6:43 pm
by ytsejam
Can someone post some test cases?
I'm having some trouble getting AC !

Posted: Sat Oct 07, 2006 3:22 am
by smilitude
input
5
9
1 3 1 4 2 1 2 3 2
2 2 1 3 1 3 1 1 1
5
2 6 7 1 1
3 7 1 1 1
6
1 8 9 6 4 1
9 1 1 2 3 2
7
13 1 2 1 3 1 2
1 2 3 1 14 3 1
6
1 2 3 4 1 4
12 3 2 1 2 1
5
3 4 4 5 6
2 1 1 14 1
output
Case 1: Possible from station 2
Case 2: Possible from station 3
Case 3: Possible from station 2
Case 4: Not possible
Case 5: Not possible
Case 6: Possible from station 5
A simple O(n^2) works fine! Dont make your program sophisticated!

Posted: Tue Oct 10, 2006 1:37 pm
by mrahman
Thank you smilitude for your test input.

I solved it using kp's method. But why this is O(n). Can anyone explain. Is there anyother method to solve this problem?

Thanks in advance

Sorry for my poor english

Re: 11093 - Just Finish it up

Posted: Thu Sep 17, 2009 9:14 pm
by StAnger
I don't understrand why my code get WA.
Could some one take a look at my code?

Code: Select all

I've solved the problem by initializing data at beginning of each step.

Re: 11093 - Just Finish it up

Posted: Tue May 27, 2014 12:24 pm
by uDebug
smilitude wrote:A simple O(n^2) works fine! Dont make your program sophisticated!
I can confirm that this statement is true. However, a completely naive implementation will not work. It requires a wee bit of optimization.

Also, in the test case above, be sure to change the number of cases to 6 (from 5).

Re: 11093 - Just Finish it up

Posted: Tue Mar 24, 2015 2:50 pm
by unreleased
query: why WA??
is the idea wrong??

Code: Select all

//Mr. WA its for you//
//This may contaminated by WA//
//Aph you see ke y WA ....its not cypher//
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <iterator>
#include <map>
#include <set>
#include <sstream>
#include <utility>
#include <bitset>

#define mx 100000
#define INT 2147483647

#define D   double
#define L   long
#define LL  long long
#define ULL unsigned long long
#define SS stringstream

#define isc1(a)      scanf("%d", &a)
#define isc2(a,b)    scanf("%d%d", &a, &b)
#define isc3(a,b,c)  scanf("%d%d%d", &a, &b, &c)
#define llsc1(a)     scanf("%I64d", &a)
#define llsc2(a,b)   scanf("%I64d%I64d", &a, &b)
#define llsc3(a,b,c) scanf("%I64d %I64d %I64d", &a,&b,&c)

#define f(a,n)  for(a=0; a<n; a++)
#define all(a)  a.begin(), a.end()
#define ms(arr) memset(arr, 0, sizeof(arr))
#define cl(a)   a.clear()
#define sz(a)   a.size()

#define sc scanf
#define pf printf
#define pu push_back
#define pb pop_back
#define vc vector
#define mp make_pair
#define fi first
#define se second
#define pip pf("pip.....\n")

using namespace std;

int main()
{
  // freopen("input.txt", "r", stdin);
    //clock_t start = clock();
    int a,b,c=1,d;
    string str, str1, str2;
    int tst, tst2,avl[123456], need[123456], temp[123456], pos;
    LL sum1, sum2, sum3;
    isc1(tst);
    while(tst--)
    {
        ms(avl); ms(need); ms(temp);
        pf("Case %d: ", c++);
        isc1(tst2);
        sum1=sum2=0;
        for(a=0; a<tst2; a++)
        {
            isc1(avl[a]);
            sum1+=avl[a];
        }

        for(a=0; a<tst2; a++)
        {
            isc1(need[a]);
            sum2+=need[a];

            temp[a]=avl[a]-need[a];

        }



        if(sum1<sum2)pf("Not possible\n");
        else
        {

            for(a=0; a<tst2; a++)
            {

                if(b==tst2){break;}
                b=pos=a; sum3=0;
                if(temp[a]>=0)
                {
                    while(sum3>=0 && b<tst2)
                    {sum3+=temp[b++];}//cout<<b<<endl;}
                }

            }

            pf("Possible from station %d\n", pos+1);
        }

    }


   //start = clock()-start;
   //pf("\n%lf sec", start/(D)CLOCKS_PER_SEC);
    return 0;
}