Skip to content

Commit 8e2b062

Browse files
authored
Merge pull request #20 from AbhiSaphire/pc-upload
HackerCup Qualifier Solutions
2 parents 2f5c835 + 9ebab47 commit 8e2b062

File tree

10 files changed

+262
-0
lines changed

10 files changed

+262
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
def Maximum_Sum(mat,n,k):
2+
if k > n:
3+
return 0
4+
stripSum = [[0 for i in range(n)] for j in range(n-k+1)]
5+
6+
for j in range(n):
7+
sum = 0
8+
for i in range(k):
9+
sum += mat[i][j]
10+
stripSum[0][j] = sum
11+
12+
for i in range(1, n-k+1):
13+
sum += (mat[i+k-1][j] - mat[i-1][j])
14+
stripSum[i][j] = sum
15+
16+
print(stripSum)
17+
max_sum = -999999999
18+
for i in range(n-k+1):
19+
sum = 0
20+
for j in range(k):
21+
sum += stripSum[i][j]
22+
if sum > max_sum:
23+
max_sum = sum
24+
25+
for j in range(1, n-k+1):
26+
sum += (stripSum[i][j+k-1] - stripSum[i][j-1])
27+
if sum > max_sum:
28+
max_sum = sum
29+
30+
return max_sum
31+
32+
print(Maximum_Sum([[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 2, 2, 1]], 5, 3))
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
def travel(n,I,O):
2+
l1=[]
3+
#print(I,O)
4+
for i in range(n):
5+
l4=[]
6+
for j in range(n):
7+
if i==j:
8+
l4.append(1)
9+
else:
10+
l4.append(0)
11+
l1.append(l4)
12+
#print(l1)
13+
#print(l1[0].index(1))
14+
for out in range(n):
15+
incoming=out
16+
outgoing=out
17+
while(incoming!=0):
18+
incoming-=1
19+
#print(outgoing,incoming,O[outgoing],I[incoming])
20+
if O[outgoing]=='Y' and I[incoming]=='Y':
21+
l1[out][incoming]=1
22+
outgoing-=1
23+
else:
24+
break
25+
#print(l1)
26+
for out in range(n):
27+
incoming=out
28+
outgoing=out
29+
while(incoming!=(n-1)):
30+
incoming+=1
31+
#print(outgoing,incoming,O[outgoing],I[incoming])
32+
if O[outgoing]=='Y' and I[incoming]=='Y':
33+
l1[out][incoming]=1
34+
outgoing+=1
35+
else:
36+
break
37+
#print(l1)
38+
for i in range(n):
39+
for j in range(n):
40+
if l1[i][j]==1:
41+
print('Y',end="")
42+
else:
43+
print('N',end="")
44+
print()
45+
46+
t=int(input())
47+
for i in range(t):
48+
n=int(input())
49+
I=input()
50+
I=list(I)
51+
O=input()
52+
O=list(O)
53+
print("Case #",i+1,":",sep="")
54+
travel(n,I,O)

Extras/HackerCup/ProblemB_Alchemy.py

Lines changed: 15 additions & 0 deletions
Large diffs are not rendered by default.

Extras/HackerCup/a.out

75.9 KB
Binary file not shown.

Extras/HackerCup/c.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include<bits/stdc++.h>
2+
#include <ext/pb_ds/assoc_container.hpp>
3+
#include <ext/pb_ds/tree_policy.hpp>
4+
using namespace __gnu_pbds;
5+
using namespace std;
6+
7+
#define mod 1000000007
8+
#define lli long long
9+
#define fi first
10+
#define se second
11+
#define pb emplace_back
12+
#define FOR(i,n) for(int i=0;i<n;i++)
13+
#define FORR(x,v) for(auto x : v)
14+
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
15+
#define MAXC 800005
16+
// %
17+
18+
int n, m, i, j, t, q, ok, cnt;
19+
lli k, r, x, y, z, ans, P[MAXC], H[MAXC];
20+
string s, c;
21+
22+
int main(int argc, char **argv)
23+
{
24+
ios::sync_with_stdio(0);
25+
cin.tie(0);
26+
cin >> t;
27+
for(q=1;q<=t;q++, ans=0){
28+
cin >> n;
29+
FOR(i, n){
30+
cin >> P[i] >> H[i];
31+
}
32+
vector< int > ord(n);
33+
iota(ord.begin(), ord.end(), 0);
34+
sort(ord.begin(), ord.end(), [&](int i, int j){
35+
return P[i] < P[j];
36+
});
37+
map< lli, lli > L, R;
38+
FORR(i, ord){
39+
if(R.count(P[i])){
40+
R[P[i]+H[i]] = R.count(P[i] + H[i])? min(R[P[i]+H[i]], R[P[i]]) : R[P[i]] ;
41+
}
42+
else{
43+
R[P[i]+H[i]] = R.count(P[i] + H[i])? min(R[P[i]+H[i]], P[i]) : P[i] ;
44+
}
45+
ans = max(ans, abs(R[P[i]+H[i]] - (P[i] + H[i])));
46+
}
47+
reverse(ord.begin(), ord.end());
48+
FORR(i, ord){
49+
if(L.count(P[i])){
50+
L[P[i]-H[i]] = L.count(P[i] - H[i])? max(L[P[i]-H[i]], L[P[i]]) : L[P[i]] ;
51+
}
52+
else{
53+
L[P[i]-H[i]] = L.count(P[i] - H[i])? max(L[P[i]-H[i]], P[i]) : P[i] ;
54+
}
55+
ans = max(ans, abs(L[P[i]-H[i]] - (P[i] - H[i])));
56+
}
57+
FORR(x, L){
58+
if(R.count(x.fi)){
59+
ans = max(ans, abs(x.se - x.fi) + abs(R[x.fi] - x.fi));
60+
}
61+
}
62+
cout << "Case #" << q << ": " << ans << '\n';
63+
}
64+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
def JosephusProblem(n, k):
2+
if n == 1:
3+
return 1
4+
ret = (JosephusProblem(n-1, k) + k-1) % n+1
5+
# print(ret, n, k)
6+
return ret
7+
8+
print(JosephusProblem(7, 3))
9+
print(JosephusProblem(5, 2))
10+
print(JosephusProblem(6, 2))
11+
12+
13+
14+
# n = 6, k = 2 ------> 5
15+
#
16+
# -> 1 ->
17+
# 6 2
18+
# ^ |
19+
# | v
20+
# 5 3
21+
# <- 4 <-
22+
#
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
def RecursivePalindrome(s):
2+
if len(s) <= 1:
3+
return True
4+
if s[0] != s[-1]:
5+
return False
6+
if s[0] == s[-1]:
7+
return RecursivePalindrome(s[1:-1])
8+
9+
print(RecursivePalindrome("abba"))# True
10+
print(RecursivePalindrome("abvba"))# True
11+
print(RecursivePalindrome("abdc"))# False
12+
print(RecursivePalindrome("aabba"))# False
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
def RecursiveSearch(l, x):
2+
if not len(l):
3+
return False
4+
if l[0] == x:
5+
return True
6+
if l[-1] == x:
7+
return True
8+
return RecursiveSearch(l[1:-1], x)
9+
10+
print(RecursiveSearch([10, 22, 343, 421, 11, 6, 7, 8, 9, 10], 11))
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Subset or Subsequence generation
2+
# Input - "abc", Output - "a", "b", "c", "ab", "ac", "abc", "bc"
3+
# Input - "abcd", Output - "a", "b", "c", "d", "ab", "ac", "ad", "abc", "acd", "abd", "abcd", "bc", "bcd", "bd", "cd"
4+
5+
# "abc" "ab" "ac" "a" "bc" "b" "c" ""
6+
# \ / \ / \ / \ /
7+
# "ab" "a" "b" ""
8+
# \ / \ /
9+
# "a" ""
10+
# \ /
11+
# curr = ""
12+
13+
# Options -
14+
# 1) Consider curr as a part of subset
15+
# 2) Do not consider curr as a part of subset
16+
17+
def Subset(s, index = 0, curr = ''):
18+
if index == len(s):
19+
print(curr, end = ' ')
20+
return
21+
Subset(s, index + 1, curr + s[index])
22+
Subset(s, index + 1, curr)
23+
24+
Subset("abc")
25+
print()
26+
Subset("abcd")
27+
print()
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Factorial Function With and Without Tail Recursion
2+
3+
# The tail-recursive functions are considered better than
4+
# non-tail recursive functions as tail-recursion can be
5+
# optimized by compiler. The idea used by compilers to
6+
# optimize tail-recursive functions is simple, since the
7+
# recursive call is the last statement, there is nothing
8+
# left to do in the current function, so saving the current
9+
# function’s stack frame is of no use.
10+
11+
12+
def NotTailFactorial(n):
13+
if n <= 1:
14+
return 1
15+
return n*NotTailFactorial(n-1)
16+
17+
def TailFactorial(n, a):
18+
if n <= 1:
19+
return a
20+
return TailFactorial(n-1, n*a)
21+
22+
print(NotTailFactorial(20))
23+
print(TailFactorial(20, 1))
24+
25+
print(NotTailFactorial(30))
26+
print(TailFactorial(30, 1))

0 commit comments

Comments
 (0)