about summary refs log tree commit diff
path: root/codechef
diff options
context:
space:
mode:
Diffstat (limited to 'codechef')
-rwxr-xr-xcodechef/cash.py4
-rwxr-xr-xcodechef/chefrail.py48
-rwxr-xr-xcodechef/longcook.py20
-rwxr-xr-xcodechef/nochange.lua36
-rwxr-xr-xcodechef/snug-fit.py5
-rw-r--r--codechef/theatre.cc54
6 files changed, 167 insertions, 0 deletions
diff --git a/codechef/cash.py b/codechef/cash.py
new file mode 100755
index 0000000..b9463fc
--- /dev/null
+++ b/codechef/cash.py
@@ -0,0 +1,4 @@
+#!/usr/bin/env python
+for t in range(int(input())):
+    n, k = map(int, input().split())
+    print(sum(map(int, input().split())) % k)
diff --git a/codechef/chefrail.py b/codechef/chefrail.py
new file mode 100755
index 0000000..d70a637
--- /dev/null
+++ b/codechef/chefrail.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+from itertools import count, takewhile
+from typing import Iterator, Set
+
+
+def binary(i: int, h: int) -> Iterator[int]:
+    while h % i == 0:
+        yield i
+        i <<= 1
+
+
+def rail(x: Set[int], y: Set[int]) -> int:
+    result = 0
+    for h in map(abs, x):
+        result += -h in y and h in y
+        if h < 2: continue
+
+        k, z = h, list(takewhile(lambda j: j < h, binary(1, h*h)))
+        while k % 2 == 0: k >>= 1
+        for i in takewhile(lambda j: j*j <= k, count(3, 2)):
+            start, stop = 0, len(z)
+            while k % i == 0:
+                k //= i
+                z.extend(i*j for j in z[start:stop] if i*j < h)
+                start, stop = stop, len(z)
+                z.extend(i*j for j in z[start:stop] if i*j < h)
+                start, stop = stop, len(z)
+        if k > 1:
+            start, stop = 0, len(z)
+            z.extend(k*j for j in z[start:stop] if k*j < h)
+            start, stop = stop, len(z)
+            z.extend(k*j for j in z[start:stop] if k*j < h)
+
+        for i in z:
+            j = h * h // i
+            result += (-i in y and j in y) + (i in y and -j in y)
+    return result
+
+
+for t in range(int(input())):
+    input()
+    x = set(map(int, input().split()))
+    y = set(map(int, input().split()))
+
+    zero = 0 in x or 0 in y
+    if 0 in x: x.remove(0)
+    if 0 in y: y.remove(0)
+    print((zero and len(x)*len(y)) + rail(x, y) + rail(y, x))
diff --git a/codechef/longcook.py b/codechef/longcook.py
new file mode 100755
index 0000000..d57d9f2
--- /dev/null
+++ b/codechef/longcook.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+from calendar import isleap
+from datetime import datetime
+
+OVERLAP = [datetime(i or 400, 2, 7).weekday()
+           in ([4] if isleap(i or 400) else [4, 5]) for i in range(400)]
+OOP = sum(OVERLAP)
+
+
+def longcook(start, end):
+    delta = end - start
+    if delta <= 0: return 0
+    return delta//400*OOP + sum(OVERLAP[y % 400]
+                                for y in range(start, start + delta%400))
+
+
+for t in range(int(input())):
+    m1, y1 = map(int, input().split())
+    m2, y2 = map(int, input().split())
+    print(longcook(y1+(m1>2), y2+(m2!=1)))
diff --git a/codechef/nochange.lua b/codechef/nochange.lua
new file mode 100755
index 0000000..818959c
--- /dev/null
+++ b/codechef/nochange.lua
@@ -0,0 +1,36 @@
+#!/usr/bin/env lua
+local read = io.read
+local print = print
+local table = {concat = table.concat, insert = table.insert}
+
+for t = 1, read('*n') do
+  local n, p = read('*n', '*n')
+  local d = {}
+  for i = 1, n do table.insert(d, read('*n')) end
+
+  local unanswered, previous = true, 1
+  for k, v in ipairs(d) do
+    if p % v ~= 0 then
+      local c = {}
+      for i = 1, k-1 do table.insert(c, 0) end
+      table.insert(c, p//v+1)
+      for i = k+1, n do table.insert(c, 0) end
+      print(('YES %s'):format(table.concat(c, ' ')))
+      unanswered = false
+      break
+    end
+
+    if v % previous ~= 0 then
+      local c = {}
+      for i = 1, k-2 do table.insert(c, 0) end
+      table.insert(c, v//previous+1)
+      table.insert(c, p//v-1)
+      for i = k+1, n do table.insert(c, 0) end
+      print(('YES %s'):format(table.concat(c, ' ')))
+      unanswered = false
+      break
+    end
+    previous = v
+  end
+  if unanswered then print('NO') end
+end
diff --git a/codechef/snug-fit.py b/codechef/snug-fit.py
new file mode 100755
index 0000000..58e1700
--- /dev/null
+++ b/codechef/snug-fit.py
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+for t in range(int(input())):
+    input()
+    print(sum(map(min, sorted(map(int, input().split())),
+                  sorted(map(int, input().split())))))
diff --git a/codechef/theatre.cc b/codechef/theatre.cc
new file mode 100644
index 0000000..ea576f8
--- /dev/null
+++ b/codechef/theatre.cc
@@ -0,0 +1,54 @@
+#include <algorithm>
+#include <iostream>
+#include <map>
+#include <string>
+#include <vector>
+
+using namespace std;
+
+int
+main()
+{
+  int k, total_profit {0};
+  string movies {"ABCD"};
+  vector<int> showtimes {3, 6, 9, 12};
+  vector<int> prices {25, 50, 75, 100};
+
+  cin >> k;
+  while (k--)
+    {
+      map<char, map<int, int>> requests;
+      int n, t, profit {-400};
+      char m;
+
+      cin >> n;
+      while (n--)
+        {
+          cin >> m >> t;
+          requests[m][t]++;
+        }
+
+      for (int i = 0; i < 24; ++i)
+        {
+          for (int j = 0; j < 24; ++j)
+            {
+              vector<int> tickets {requests[movies[0]][showtimes[0]],
+                                   requests[movies[1]][showtimes[1]],
+                                   requests[movies[2]][showtimes[2]],
+                                   requests[movies[3]][showtimes[3]]};
+              int p {0};
+
+              sort (tickets.begin(), tickets.end());
+              for (int l = 0; l < 4; ++l)
+                p += tickets[l] ? tickets[l]*prices[l] : -100;
+              profit = max (p, profit);
+              next_permutation (showtimes.begin(), showtimes.end());
+            }
+          next_permutation (movies.begin(), movies.end());
+        }
+
+      cout << profit << endl;
+      total_profit += profit;
+    }
+  cout << total_profit << endl;
+}