File tree Expand file tree Collapse file tree 2 files changed +75
-28
lines changed
CP/January Challenge 2018 Expand file tree Collapse file tree 2 files changed +75
-28
lines changed Original file line number Diff line number Diff line change 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
28
35
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 )
Original file line number Diff line number Diff line change
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 )
You can’t perform that action at this time.
0 commit comments