diff options
-rwxr-xr-x | codechef/cash.py | 4 | ||||
-rwxr-xr-x | codechef/chefrail.py | 48 | ||||
-rwxr-xr-x | codechef/longcook.py | 20 | ||||
-rwxr-xr-x | codechef/nochange.lua | 36 | ||||
-rwxr-xr-x | codechef/snug-fit.py | 5 | ||||
-rw-r--r-- | codechef/theatre.cc | 54 |
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; +} |