Skip to content

Commit f9a7e63

Browse files
committed
Hackerrank Univ Codesprint + Bioinformatics Contest + Codechef Cook79
1 parent 47a6972 commit f9a7e63

17 files changed

+836
-0
lines changed

bioinformatics/gene_expression.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int main() {
6+
7+
return 0;
8+
}

bioinformatics/gene_expression.py

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#!/bin/python3
2+
3+
def intersec(a, b, x, y):
4+
return a <= y and x <= b
5+
6+
n, m = map(int, input().strip().split())
7+
a = []
8+
for i in range(n):
9+
tmp = list(map(int, input().strip().split()))
10+
cnt = len(tmp)
11+
for j in range(cnt):
12+
a.append((tmp[j] + (j & 1), (j & 1) ^ 1, i))
13+
a.sort()
14+
st = set()
15+
seg = []
16+
cur = 0
17+
for it in a:
18+
if it[0] == cur:
19+
if it[1]:
20+
st.add(it[2])
21+
else:
22+
st.discard(it[2])
23+
else:
24+
if len(st) > 1:
25+
seg.append((cur, -2))
26+
elif len(st) == 1:
27+
for e in st:
28+
seg.append((cur, e))
29+
else:
30+
seg.append((cur, -1))
31+
cur = it[0]
32+
if it[1]:
33+
st.add(it[2])
34+
else:
35+
st.discard(it[2])
36+
if len(st) > 1:
37+
seg.append((cur, -2))
38+
elif len(st) == 1:
39+
for e in st:
40+
seg.append((cur, e))
41+
else:
42+
seg.append((cur, -1))
43+
44+
nseg = len(seg)
45+
ans = [0] * n
46+
for _ in range(m):
47+
b = list(map(int, input().strip().split()))
48+
idd = -1
49+
ln = len(b)
50+
ok = True
51+
for i in range(0, ln, 2):
52+
assert(b[i] >= 0)
53+
l = 0
54+
r = nseg-1
55+
while l < r:
56+
mid = (l + r+1)//2
57+
if seg[mid][0] <= b[i]:
58+
l = mid
59+
else:
60+
r = mid-1
61+
assert(seg[l][0] <= b[i])
62+
while l < nseg and seg[l][0] <= b[i+1]:
63+
if seg[l][1] == -2:
64+
ok = False
65+
break
66+
elif seg[l][1] != -1:
67+
if idd != -1 and idd != seg[l][1]:
68+
ok = False
69+
break
70+
idd = seg[l][1]
71+
l += 1
72+
if not ok:
73+
break
74+
if ok and idd != -1:
75+
ans[idd] += 1
76+
print('\n'.join(map(str, ans)))
+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/bin/python3
2+
3+
import sys
4+
5+
for line in sys.stdin:
6+
n, k = map(int, line.split())
7+
s = []
8+
nx = [-1] * n
9+
bef = [-1] * n
10+
for i in range(n):
11+
s.append(input().strip())
12+
g = [[False] * n for _ in range(n)]
13+
din = [0] * n
14+
dout = [0] * n
15+
for i in range(n):
16+
for j in range(n):
17+
if i == j: continue
18+
g[i][j] = s[i][1:] == s[j][:k-1]
19+
if g[i][j]:
20+
din[j] += 1
21+
dout[i] += 1
22+
for i in range(n):
23+
h = -1
24+
for j in range(n):
25+
if nx[j] != -1: continue
26+
if h == -1 or dout[h] > dout[j]:
27+
h = j
28+
if h == -1:
29+
continue
30+
to = -1
31+
for j in range(n):
32+
if bef[j] >= 0: continue
33+
if not g[h][j]: continue
34+
if to == -1 or din[to] > din[j]:
35+
cur = h
36+
while cur != -1 and cur != j:
37+
cur = bef[cur]
38+
if cur == j:
39+
continue
40+
to = j
41+
if to == -1:
42+
nx[h] = -2
43+
continue
44+
bef[to] = h
45+
nx[h] = to
46+
for j in range(n):
47+
if g[h][j]:
48+
din[j] -= 1
49+
if g[j][to]:
50+
dout[j] -= 1
51+
ans = []
52+
for i in range(n):
53+
if bef[i] >= 0: continue
54+
now = s[i]
55+
cur = nx[i]
56+
while cur >= 0 and cur != i:
57+
now += s[cur][k-1]
58+
cur = nx[cur]
59+
ans.append(now)
60+
if len(ans) == 0:
61+
assert(False)
62+
now = s[0]
63+
cur = nx[0]
64+
while cur >= 0 and cur != 0:
65+
now += s[cur][k-1]
66+
cur = nx[cur]
67+
ans.append(now)
68+
print(len(ans))
69+
print('\n'.join(ans))
+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/bin/python3
2+
3+
import sys
4+
5+
for line in sys.stdin:
6+
n, k = map(int, line.split())
7+
s = []
8+
nx = [-1] * n
9+
bef = [-1] * n
10+
for i in range(n):
11+
s.append(input().strip())
12+
g = [[False] * n for _ in range(n)]
13+
din = [0] * n
14+
dout = [0] * n
15+
for i in range(n):
16+
for j in range(n):
17+
if i == j: continue
18+
g[i][j] = s[i][1:] == s[j][:k-1]
19+
if g[i][j]:
20+
din[j] += 1
21+
dout[i] += 1
22+
for i in range(n):
23+
h = -1
24+
for j in range(n):
25+
if nx[j] != -1: continue
26+
if h == -1 or dout[h] > dout[j]:
27+
h = j
28+
if h == -1:
29+
continue
30+
to = -1
31+
for j in range(n):
32+
if bef[j] >= 0: continue
33+
if not g[h][j]: continue
34+
if to == -1 or din[to] > din[j]:
35+
cur = h
36+
while cur != -1 and cur != j:
37+
cur = bef[cur]
38+
if cur == j:
39+
continue
40+
to = j
41+
if to == -1:
42+
nx[h] = -2
43+
continue
44+
bef[to] = h
45+
nx[h] = to
46+
for j in range(n):
47+
if g[h][j]:
48+
din[j] -= 1
49+
if g[j][to]:
50+
dout[j] -= 1
51+
ans = []
52+
for i in range(n):
53+
if bef[i] >= 0: continue
54+
now = s[i]
55+
cur = nx[i]
56+
while cur >= 0 and cur != i:
57+
now += s[cur][k-1]
58+
cur = nx[cur]
59+
ans.append(now)
60+
if len(ans) == 0:
61+
assert(False)
62+
now = s[0]
63+
cur = nx[0]
64+
while cur >= 0 and cur != 0:
65+
now += s[cur][k-1]
66+
cur = nx[cur]
67+
ans.append(now)
68+
print(len(ans))
69+
print('\n'.join(ans))

codechef/cook79/addmult.cpp

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
const int N = 1e6 + 6;
6+
7+
int a[N];
8+
char s[N];
9+
10+
int main() {
11+
int t;
12+
scanf("%d", &t);
13+
while (t--) {
14+
int n;
15+
scanf("%d %s", &n, s);
16+
for (int i = 0; i < n; i++)
17+
scanf("%d", a+i), a[i] &= 1;
18+
int len = strlen(s);
19+
if (len > 4) { // chefu 1
20+
if (n & 1) {
21+
bool ok = 1;
22+
for (int i = 0; i < n; i += 2)
23+
if (!a[i])
24+
ok = 0;
25+
puts(ok ? "Chefu" : "Chef");
26+
}
27+
else
28+
puts("Chef");
29+
}
30+
else {
31+
if (n & 1)
32+
puts("Chef");
33+
else {
34+
int i = 0, j = n-1;
35+
while (i < n && a[i]) i += 2;
36+
while (j >= 0 && a[j]) j -= 2;
37+
puts((j <= i) ? "Chefu" : "Chef");
38+
}
39+
}
40+
}
41+
return 0;
42+
}

codechef/cook79/chairs.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
const int N = 1e6 + 6;
6+
char s[N];
7+
8+
int main() {
9+
int t;
10+
scanf("%d", &t);
11+
while (t--) {
12+
int n;
13+
scanf("%d %s", &n, s);
14+
int one = 0, ma = 0, now = 0;
15+
for (int i = 0; i < n; i++)
16+
one += s[i] == '0';
17+
for (int i = 0; i < 2 * n; i++) {
18+
if (s[i % n] == '0')
19+
now++;
20+
else
21+
now = 0;
22+
ma = max(ma, now);
23+
}
24+
printf("%d\n", max(one - ma, 0));
25+
}
26+
return 0;
27+
}

codechef/cook79/cookgame.cpp

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
const int N = 1e6 + 5;
6+
const int mod = 1e9 + 7;
7+
long long powmod(long long b, long long p) {
8+
long long ret = 1;
9+
for (; p; p >>= 1, b = (b * b) % mod)
10+
if (p&1) ret = (ret * b) % mod;
11+
return ret;
12+
}
13+
14+
int a[N];
15+
16+
int main() {
17+
int t;
18+
scanf("%d", &t);
19+
while (t--) {
20+
int n;
21+
scanf("%d", &n);
22+
for (int i = 0; i < n; i++) {
23+
scanf("%d", a+i);
24+
}
25+
int now = 0;
26+
long long ans = 1;
27+
for (int i = n-1; i >= 0; i--, now = max(now-1, 0)) {
28+
if (a[i] != -1) {
29+
if (now <= 0)
30+
now = a[i];
31+
else
32+
if (now != a[i]) {
33+
ans = 0;
34+
break;
35+
}
36+
}
37+
else {
38+
if (now > 0)
39+
a[i] = now;
40+
else {
41+
if (i > 0)
42+
ans = (ans + ans) % mod;
43+
}
44+
}
45+
}
46+
if (a[0] != -1 && a[0] != 1)
47+
ans = 0;
48+
printf("%lld\n", ans);
49+
}
50+
return 0;
51+
}

codechef/cook79/dwnld.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int main() {
6+
int t;
7+
scanf("%d", &t);
8+
while (t--) {
9+
int n, k;
10+
scanf("%d %d", &n, &k);
11+
int ans = 0, now = 0;
12+
while (n--) {
13+
int tm, d;
14+
scanf("%d %d", &tm, &d);
15+
int bon = max(0, k-now);
16+
now += tm;
17+
tm -= bon;
18+
if (tm <= 0)
19+
continue;
20+
ans += tm * d;
21+
}
22+
printf("%d\n", ans);
23+
}
24+
return 0;
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
n = int(input())
2+
a = list(map(int, input().split()))
3+
ma, mi = a[0], a[0]
4+
ans1, ans2 = 0, 0
5+
for v in a:
6+
if v > ma:
7+
ans1 += 1
8+
ma = v
9+
if v < mi:
10+
ans2 += 1
11+
mi = v
12+
print(ans1, ans2)

0 commit comments

Comments
 (0)