Skip to content

Commit fc41ada

Browse files
committed
Kadane problem
1 parent 2024e14 commit fc41ada

File tree

2 files changed

+75
-28
lines changed

2 files changed

+75
-28
lines changed

CP/January Challenge 2018/kconcat.py

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,43 @@
1-
'''
2-
listB.sort(reverse=True) # listB gets modified
3-
listC = sorted(listB, reverse=True) # listB remains untouched
4-
'''
5-
6-
7-
for _ in range(int(input())):
8-
n = int(input())
9-
b = []
10-
for __ in range(n):
11-
a = map(int,raw_input().split())
12-
b.append(sorted(a))
13-
su = b[n-1][-1]
14-
k1=su
15-
16-
for x in range(n-2,-1,-1):
17-
flag = 0
18-
for y in range(n-1,-1,-1):
19-
if(b[x][y]<k1):
20-
k1=b[x][y]
21-
su+=k1
22-
flag = 1
23-
break
24-
if(flag == 0):
25-
break
26-
if(flag == 0):
27-
print("-1")
1+
int_min = -float('inf')
2+
3+
def kadane(a , k):
4+
n = len(a)
5+
temp = 0
6+
maxm = int_min
7+
while k :
8+
k -= 1
9+
10+
for i in range(n):
11+
temp += a[i]
12+
if temp > maxm :
13+
maxm = temp
14+
15+
if temp < 0 :
16+
temp = 0
17+
18+
return maxm
19+
20+
t = int(raw_input())
21+
for a0 in range(t):
22+
n,k = map(int , raw_input().split())
23+
arr = map(int , raw_input().split())
24+
25+
sumi = 0
26+
maxi = -float('inf')
27+
28+
s1 = kadane(arr , 1)
29+
s2 = kadane(arr , 2)
30+
s3 = kadane(arr , 3)
31+
s4 = kadane(arr , 4)
32+
33+
if s1 == s2 :
34+
print s1
2835
else :
29-
print(su)
36+
if k == 1 :
37+
print s1
38+
elif k == 2:
39+
print s2
40+
elif k == 3 :
41+
print s3
42+
else :
43+
print s3 + (k-3)*(s4-s3)

CP/January Challenge 2018/kconcat1.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
int_min = -float('inf')
2+
def maxSubArraySum(a,k):
3+
max_so_far = int_min
4+
max_ending_here = 0
5+
while k:
6+
k-=1
7+
for i in range(0, len(a)):
8+
max_ending_here = max_ending_here + a[i]
9+
if (max_so_far < max_ending_here):
10+
max_so_far = max_ending_here
11+
12+
if max_ending_here < 0:
13+
max_ending_here = 0
14+
15+
return max_so_far
16+
17+
# Driver function to check the above function
18+
#print "Maximum contiguous sum is", maxSubArraySum(a,len(a))
19+
20+
for __ in range(int(input())):
21+
n,k = map(int,raw_input().split())
22+
a = map(int,raw_input().split())
23+
s1 = maxSubArraySum(a , 1)
24+
s2 = maxSubArraySum(a , 2)
25+
s3 = maxSubArraySum(a , 3)
26+
s4 = maxSubArraySum(a , 4)
27+
28+
if k == 1 :
29+
print s1
30+
elif k == 2:
31+
print s2
32+
else :
33+
print s2 + (k-2)*(s3-s2)

0 commit comments

Comments
 (0)