# ZCO 14 SUPW

This is my code for SUPW in python-

``````n = int(input())
c = list(map(int,input().strip().split()))
if n <= 3:
print(min(c))
else:
cost = [c[0],c[1],c[2]]
for i in range(3,n):
cost.append(c[i] + min(cost[i-3:i]))
print(min(cost[n-3:]))
``````

This is giving accepted for all test cases except for test case 2 in which it is giving Runtime Error. Can someone tell me the reason or provide a test case where it fails.

So what I have done is that-

``````Cost[i] = min time if we work that day.

So cost[0] = c[0],
cost[1] = c[1],
cost[2] = c[2]
And for the rest it is c[i] + min of the previous 3 elements.
And the answer is the min of the last 3 elements.
``````

Dont have any debugging experience in python , but I got AC with the same logic but I used C++ , here is my code,

``````#include <iostream>
#include <vector>
#include <algorithm>

int main(){
int n;
std::cin >> n;
std::vector<int>dutyTime(n);
for(int i=0;i<n;i++){
std::cin >> dutyTime[i];
}
std::vector<int>bestTime(n);
bestTime[0] = dutyTime[0];
bestTime[1] = dutyTime[1];
bestTime[2] = dutyTime[2];
for(int i=3;i<n;i++){
bestTime[i] = dutyTime[i]+std::min(bestTime[i-1],std::min(bestTime[i-2],bestTime[i-3]));
}

std::cout << std::min(bestTime[n-1],std::min(bestTime[n-2],bestTime[n-3])) << std::endl;

return 0;
}
``````

Probably I would use `c = raw_input(); timeList = c.split(" "); #### then a for loop for converting it to int list ` rather than `list(map(int,input().strip().split()))` but thats all upto you , i prefer the previous one for its readability and easy to debugâ€™nessâ€™.

I tried changing list(map(â€¦)) but it didnâ€™t work out.

Maybe I should try it in c++ after learning c++ a bit more.

OK, so I finally found the bug. I submitted a solution which was the following-

Take the input. Thatâ€™s it.

It was still showing error on test-case 2.

Then I submitted a solution in which it said that if thereâ€™s a character which is non numeric and it is not a space then it raises an error and it did on test case 2.

So finally I submitted a solution in which it took input in such a way that it did not include alphabetical characters and I got AC.

Thanks by the way mz54. I donâ€™t have enough karma to upvote else I would have upvoted your help.
Here is my solution-

``````n = int(input().strip())
c = input().strip().split()
j = 0
while j < n:
try:
c[j] = int(c[j])
except:
pass
finally:
j += 1
n = len(c)
if n <= 3:
print(min(c))
else:
for i in range(3,n):
c[i] += min(c[i-3:i])
print(min(c[n-3:]))
``````

My solution

1 Like

give it a try , I also started with python but now after 4 months with c++ , I am in love with it, because of its easiness to debug

The same thing happened in the problem Wormholes in which the problem was that it said that the next n lines will give the time of the contest but in 2 test cases there were not n lines but less then that so I was taking extra input and again I had to add a try-except block.

1 Like

Thanks a lot @mathecodician. I had been trying to solve that SUPW problem for months and everytime it gave me error on the second test. Your suggestion to take input in such a way so that it does not include characters other than numbers helped a lot. It finally worked after 30-40 tries!! Thanks a lot!

For Java users, just do the conversion from String to integer inside the try block and also make a catch block to catch the exception. Like this:-

``````  N=Integer.parseInt(br.readLine()); //array length

String s[]=br.readLine().trim().split(" "); //accepting the time for each SUPW work
int a[]=new int[N];

for(i=0;i<N;i++) //converting from String to integer
{
int ch=0;
try
{
ch=Integer.parseInt(s[i].trim());
}
catch(Exception e)
{
}
a[i]=ch;
}
``````

This will work

1 Like

@mathecodician

I am facing same issue in warmholes problem, can you please answer the question on the link below.