Skip to content

Commit 65112a7

Browse files
committed
added new problems
1 parent d36da9a commit 65112a7

24 files changed

+688
-99
lines changed

New folder/binaryexponentiation.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
def biex(a,n):
2+
res=1
3+
while(n):
4+
if n%2:
5+
res=res*a
6+
n=n-1
7+
else:
8+
a=a*a
9+
n=n//2
10+
return res
11+
12+
def modex(a,n,p):
13+
res=1
14+
while(n):
15+
if n%2:
16+
res=(res*a)%p
17+
n=n-1
18+
19+
else:
20+
a=(a*a)%p
21+
n=n//2
22+
23+
return res
24+
print(biex(2,6))
25+
print(modex(2,6,2))

New folder/cseserslegions.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
memo={}
3+
4+
def getans(n,f,h,k1,k2,z1,z2):
5+
6+
if n==0:
7+
return 1
8+
9+
if (n,f,h,k1,k2,z1,z2) in memo:
10+
return memo[(n,f,h,k1,k2,z1,z2)]
11+
x=0
12+
if f>0 and k1>0:
13+
x=getans(n-1,f-1,h,k1-1,z2,z1,z2)
14+
y=0
15+
if h>0 and k2>0:
16+
y=getans(n-1,f,h-1,z1,k2-1,z1,z2)
17+
memo[(n,f,h,k1,k2,z1,z2)]=x+y
18+
return x+y
19+
20+
n1,n2,k1,k2=map(int,input().split())
21+
print(getans(n1+n2,n1,n2,k1,k2,k1,k2))

New folder/disjointset.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#owl fight hackerrank.com
2+
3+
4+
# n=input()
5+
n=5
6+
parent=[-1 for i in range(n+1)]
7+
8+
def find(a):
9+
if parent[a]<0:
10+
return a
11+
12+
else:
13+
x=find(parent[a])
14+
parent[a]=x
15+
return x
16+
17+
18+
def union(a,b):
19+
parent[a]=min(parent[a],parent[b])
20+
parent[b]=a
21+
22+
for i in range(3):
23+
a,b=map(int,input().split())
24+
union(a,b)
25+
26+
for q in range(2):
27+
x,y=map(int,input().split())
28+
if find(x)==find(y):
29+
print("TIE")
30+
if find(x)>find(y):
31+
print(x)
32+
if find(y)>find(x):
33+
print(y)
34+
35+
36+

New folder/eulerstotientfunction.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
2+
3+
4+
def phi1(n):
5+
'''
6+
sqrt(n)
7+
'''
8+
res=n
9+
i=2
10+
while(i*i<=n):
11+
if n%i==0:
12+
res=res//i
13+
res=res*(i-1)
14+
15+
while(n%i==0):
16+
n=n//i
17+
18+
i+=1
19+
20+
if n>1:
21+
res=res//n
22+
res=res*(n-1)
23+
return res
24+
25+
26+
'''
27+
log(log(n))
28+
'''
29+
def phi2(maxn):
30+
phi=[]
31+
for i in range(maxn+2):
32+
phi.append(i)
33+
34+
for i in range(2,maxn+2):
35+
if phi[i]==i:
36+
for j in range(i,maxn+2,i):
37+
phi[j]=phi[j]//i
38+
phi[j]*=(i-1)
39+
40+
41+
return phi[maxn]
42+
43+
44+
45+
t=10
46+
while(t):
47+
n=int(input())
48+
49+
print(phi1(n))
50+
print(phi2(n))
51+

New folder/gcdquery.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
'''
2+
given an array=[2,4,6,9,10] and two integers L,R you have to find gcd of all numbers from L to R excluding L,R'''
3+
4+
from math import gcd
5+
6+
array=[2,4,6,9,10]
7+
def pre(arr,n):
8+
pre=[0 for i in range(n)]
9+
pre[0]=arr[0]
10+
for i in range(1,n):
11+
pre[i]=gcd(arr[i],pre[i-1])
12+
13+
14+
return pre
15+
16+
def suf(arr,n):
17+
suf=[0 for i in range(n)]
18+
suf[n-1]=arr[n-1]
19+
for i in range(n-2,0):
20+
suf[i]=gcd(arr[i],suf[i+1])
21+
22+
return suf
23+
24+
25+
n=len(array)
26+
pre=pre(array, n)
27+
suf=suf(array, n)
28+
print(gcd(pre[1],suf[3]))

New folder/matrixexpo.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from math import gcd
2+
print(gcd(1,2))

New folder/owlfight(disjointset).py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#owl fight hackerrank.com
2+
3+
4+
# n=input()
5+
n=5
6+
parent=[-1 for i in range(n+1)]
7+
rank=[1 for i in range(n+1)]
8+
def find(a):
9+
if parent[a]<0:
10+
return a
11+
12+
else:
13+
x=find(parent[a])
14+
parent[a]=x
15+
return x
16+
17+
18+
def union(a,b):
19+
parent[a]=min(parent[a],parent[b])
20+
parent[b]=a
21+
22+
# original
23+
def merge(a,b):
24+
a=find(a)
25+
b=find(b)
26+
if a==b:
27+
return
28+
29+
if rank[a]>rank[b]:
30+
parent[b]=a
31+
rank[a]+=rank[b]
32+
else:
33+
parent[a]=b
34+
rank[b]+=a
35+
36+
37+
for i in range(3):
38+
a,b=map(int,input().split())
39+
union(a,b)
40+
41+
for q in range(2):
42+
x,y=map(int,input().split())
43+
if find(x)==find(y):
44+
print("TIE")
45+
if find(x)>find(y):
46+
print(x)
47+
if find(y)>find(x):
48+
print(y)
49+
50+
51+

New folder/seivefactorisation.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
maxn=1000001
2+
3+
4+
def seivefact():
5+
arr=[-1 for i in range(maxn+1)]
6+
for i in range(2,maxn+1):
7+
if arr[i]==-1:
8+
j=i
9+
while(j<=maxn):
10+
if arr[j]==-1:
11+
arr[j]=i
12+
j=j+i
13+
return arr
14+
15+
16+
17+
print(seivefact())

bridges.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
def dfs(node,par):
2+
vis[node]=1
3+
In[node]=low[node]=timer
4+
timer+=1
5+
for child in graph[node]:
6+
if child==par:
7+
continue
8+
if vis[child]==1:
9+
low[node]=min(low[node], In[child])
10+
else:
11+
dfs(child,node)
12+
13+
if low[child]>In[node]:
14+
print("{0} -> {1} is a bridge".format(child,node))
15+
low[node]=min(low[node], low[child])
16+
17+
18+

cereja and brackets.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
def combine(left,right):
2+
z=min(left[1],right[2])
3+
a=left[0]+right[0]+z
4+
b=left[1]+right[1]-z
5+
c=left[2]+right[2]-z
6+
return (a,b,c)
7+
8+
9+
def build(idx,l,r):
10+
if l==r:
11+
if string[l]=='(':
12+
tree[1]+=1
13+
else:
14+
tree[2]+=1
15+
else:
16+
mid=(l+r)//2
17+
build(2*idx+1,l,mid)
18+
build(2*idx+2,mid+1,r)
19+
tree[idx]=combine(tree[2*idx+1],tree[2*idx+2])
20+
21+
def query(idx,x,y,l,r):
22+
if l>=y or x>=r:
23+
return (0,0,0)
24+
if x<=l and r<=y:
25+
return tree[idx]
26+
mid=(l+r)//2
27+
left=query(2*idx+1,x,y,l,mid)
28+
right=query(2*idx+2,x,y,mid+1,r)
29+
30+
return combine(left,right)
31+
32+
33+
if __name__ == '__main__':
34+
string=input()
35+
n=len(string)
36+
m=int(input())
37+
tree=[(0,0,0) for i in range(5*n)]
38+
build(0,0,n-1)
39+
for i in range(m):
40+
a,b=map(int,input().split())
41+
a=a-1
42+
b=b-1
43+
ans=query(0,a,b,0,n-1)
44+
print(ans)
45+

dpontrees.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def dfs(x:int,parent:int):
1212
taking+=dp[y][1]
1313
nottaking+=dp[y][0]
1414
dp[x][1]=nottaking
15-
dp[x][False]=max(taking,nottaking)
15+
dp[x][0]=max(taking,nottaking)
1616

1717
if __name__ == '__main__':
1818
n=int(input())

flateningoftree.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
3+
def dfs(root,parent):
4+
global timer
5+
flat[timer]=root
6+
timer+=1
7+
for child in tree[root]:
8+
if child!=parent:
9+
dfs(child,root)
10+
11+
flat[timer]=root
12+
timer+=1
13+
14+
tree=[[] for i in range(4)]
15+
for i in range(1,4):
16+
a,b=map(int,input().split())
17+
tree[a].append(b)
18+
tree[b].append(a)
19+
timer=1
20+
flat=[0 for i in range(2*3+2)]
21+
dfs(1,0)
22+
print(flat)
23+

lazypropagation.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
def upd(idx,l,r,x):
2+
lazy[idx]+=x
3+
s[idx]+=(r-l)*x
4+
5+
def shift(id,l,r):
6+
mid=(l+r)//2
7+
upd(2*idx+1,l,mid,lazy[idx])
8+
upd(2*idx+2,mid+1,r,lazy[idx])
9+
lazy[idx]=0
10+
11+
12+
def increase(x,y,val,idx,l,r):
13+
if x>=r or l>=y:
14+
return 0
15+
if x<=l and r<=y:
16+
upd(idx,l,r,val)
17+
shift(idx,l,r)
18+
mid=(l+r)//2
19+
increase(x,y,val,2*idx+1,l,mid)
20+
increase(x,y,val,2*idx+2,mid+1,r)
21+
s[idx]=s[2*idx+1]+s[2*idx+2]
22+
23+
def calsum(x,y,idx,l,r):
24+
if x>=r or l>=y:
25+
return 0
26+
if x<=l and r<=y:
27+
return s[idx]
28+
shift(idx,l,r)
29+
return calsum(x,y,2*idx+1,l,mid)+calsum(x,y,idx,2*idx+2,mid+1,r)
30+
31+
32+
33+
34+
if __name__ == '__main__':
35+
arr=[1,2,3,4,5]
36+
n=5
37+
s=[0 for i in range(2*n)]
38+
lazy=[0 for j in range(2*n)]
39+
ans1=calsum(0, n-1, idx=0, l=0, r=n-1)
40+
increase(0, n-1, 1, idx=0, l=0, r=n-1)

0 commit comments

Comments
 (0)