-
Notifications
You must be signed in to change notification settings - Fork 1
/
Elite Day-8 Program-1.txt
119 lines (93 loc) · 2.12 KB
/
Elite Day-8 Program-1.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
There is a board with M*N size.
The board contains M*N blocks of 1*1 size.
Each block is printed a number on it.
You will be given a number, your task is to find whether the number is printed on
any of the blocks or not. If found print true, otherwise print false.
NOTE:
- The numbers printed on the board in each row are in increasing order.
- Next row starting number is greater than the last number of the previous row.
Constarint:
-----------
Can you solve it in log(M)+ log(N) time.
Input Format:
-------------
Line-1 -> Two integers M and N, board size.
Next M lines -> N space separated integers.
Last Line -> An integer T, number to search.
Output Format:
--------------
Print a boolean value, 'true' if number found.
otherwise, 'false'.
Sample Input-1:
---------------
4 4
1 3 6 10
12 15 19 23
24 28 32 36
37 41 44 47
15
Sample Output-1:
----------------
true
Sample Input-2:
---------------
4 4
1 3 6 10
12 15 19 23
24 28 32 36
37 41 44 47
26
Sample Output-2:
----------------
false
using log(M)+log(N) complexity!
50/100:
def bin_search(l,n):
low,mid=0,0
high=len(l)-1
while(high>=low):
mid=(high+low)//2
if(l[mid]<n):
low=mid+1
elif(l[mid]>n):
high=mid-1
else:
return mid
return -1
r,c=map(int,input().split())
l=[]
for i in range(r):
l.append(list(map(int,input().split()))[:c])
n=int(input())
for i in range(len(l)):
if(bin_search(l[i],n)!=-1):
index=bin_search(l[i],n)
break
l1=[]
for i in range(len(l)):
l1.append(l[i][index])
# print(l1)
# print(bin_search(l1,n))
if(bin_search(l1,n)!=-1):
print(True)
else:
print(False)
100/100:
m,n=list(map(int,input().split()))
l=[]
for i in range(m):
l.append(list(map(int,input().split())))
t=int(input())
s,e,f=0,m*n-1,1
while s<=e:
mid=(s+e)//2
if l[mid//n][mid%n]==t:
print("true")
f=0
break
if l[mid//n][mid%n]<t:
s=mid+1
else:
e=mid-1
if f==1:
print("false")