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...

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

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

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;
}
```