Other

牛客华为机试HJ32

原题传送门 1. 问题描述 2. Solution 参考LeetCode5 Longest Palindromic Substring import sys if sys.platform != linux: file_in = open(input/HJ32.txt) sys.stdin = file_in def solve(s): n = len(s) dp = [[False] * n for _ in range(n)] max_len = 0 for j in range(n): for i in range(j): dp[i][j] = s[i] == s[j] and ((j - i <= 2) or dp[i + 1][j - 1]) if dp[i][j] and (j - i + 1 > max_len): max_len = j - i + 1 print(max_len) for line in sys.

牛客华为机试HJ33

原题传送门 1. 问题描述 2. Solution 1、思路 bit对齐 2、实现 import sys if sys.platform != linux: file_in = open(input/HJ33.txt) sys.stdin = file_in def int2bin(n, bits=8): n_b = bin(n).replace(0b, ) return f'{0 * (bits - len(n_b))}{n_b}' def ip2int(s): # 10.0.3.193 nums = list(map(int, s.split(.))) full_bin = .join([int2bin(x) for x in nums]) print(int(full_bin, 2)) def int2ip(n): s = int2bin(int(n), 32) print(..join([str(int(s[start: start + 8], 2)) for start in range(0, 32, 8)])) while True: try: s = input().

牛客华为机试HJ34

原题传送门 1. 问题描述 2. Solution 1、思路分析 按ASCII码排序 2、代码实现 import sys if sys.platform != linux: sys.stdin = open(input/HJ34.txt) for line in sys.stdin: s = line.strip() sorted_s = sorted(s, key=lambda x: ord(x)) print(.join(sorted_s))

牛客华为机试HJ35

原题传送门 1. 问题描述 2. Solution 1、思路分析 找规律 0 | 1 3 6 10 1 | 2 5 9 2 | 4 8 3 | 7 0 1 0 2 1 0 3 2、代码实现 import sys if sys.platform != linux: file_in = open(input/HJ35.txt) sys.stdin = file_in 0 | 1 3 6 10 1 | 2 5 9 2 | 4 8 3 | 7 0 1 0 2 1 0 3 def solve(n): result = [[] for _ in range(n)] cur_row = 0 cnt = 1 row = -1 while len(result[0]) !

联合省选 2022 游记

Day 0 看了看以前的考题,但没有落实。 Day 1 心里默念发挥正常就好。 T1 是个小模拟。大概 40min 写完,感觉时间复杂度应该没大问题,然后又手造了几组 hack。 T2 看起来很清新,先考虑如果是一个序列咋做,看到极差就想到枚举最小值,然后发现不会算... 在这道题上浪费了 2h,却一无所获。 T3 很有趣,建图后感觉有点像最小路径覆盖问题,然后随便用网络流跑了跑,发现性质 C 的答案都对了。 然后输出方案... 写了 1h+,过了前 3 个样例,但第 4 个样例方案不对,感觉很虚。 然后忘记把不满足性质 C 的边缩起来了...直接裸跑网络流... 最后打了 T2 10pts 跑路...(喂... 枚举最小值不是 20pts 吗...) 估分 \(100+10+[32,50]=[142,160]\)。 出来听到 T2 那个东西可以拉插算,然后貌似 \(O(n^5)\) 是没问题的。正解... 貌似是容斥+拉插+DP? 然后回家看到惊悚一幕:D1T3 loushang 和 louxia 写反了... 不过不影响答案,方案肯定全错掉了。 Day 2 Day 1 貌似一车人切 T2 了,Day 2 要发挥好才有机会。 下发文件很小,没有...大样例? T1 看到 \(s_i \le 2000\),然后算了算发现 \(\le \sqrt{2000}\) 的质数只有 \(14\) 个,一个数不可能有多个大质数,直接容斥就完了,复杂度貌似很对。

牛客华为机试HJ36

原题传送门 1. 题目描述 2. Solution 1 1、思路分析 先生成密钥,对输入的key按输入序去重(即保留第1次出现的字符)保存结果到letters2,然后遍历a~z,把未出现在letters2中的字符加入到letters2。 之后就是加密过程,按照下标取出对应字符即可。 2、代码实现 import sys if sys.platform != linux: file_in = open(input/HJ36.txt) sys.stdin = file_in letters1 = abcdefghijklmnopqrstuvwxyz while True: try: key = input().strip() text = input().strip() letters2 = [] for c in key: if c not in letters2: letters2.append(c) for c in letters1: if c not in letters2: letters2.append(c) for c in text: print(letters2[letters1.index(c)], end=) print() except: break

牛客华为机试HJ37

原题传送门 1. 题目描述 2. Solution 1、思路分析 斐波那契数列 2、代码实现 import sys if sys.platform != linux: sys.stdin = open(input/HJ37.txt) # 迭代实现 def solve(n): a, b = 0, 1 for i in range(n): a, b = b, a + b print(a) def tail_recur(n, n1, n2): if n == 1: return n1 return tail_recur(n - 1, n2, n1 + n2) for line in sys.stdin: n = int(line.strip()) # solve(n) print(tail_recur(n, 1, 1))

牛客华为机试HJ38

原题传送门 1. 题目描述 2. Solution 1 import sys if sys.platform != linux: file_in = open(input/HJ38.txt) sys.stdin = file_in for line in sys.stdin: n = int(line.strip()) sum = n for i in range(4): n /= 2 sum += 2 * n n /= 2 print(sum) print(n)

牛客华为机试HJ39

原题传送门 1. 题目描述 2. Solution 1、思路 把ip全转换为32bit 字符串,模拟与运算。 2、实现 import sys if sys.platform != linux: file_in = open(input/HJ39.txt) sys.stdin = file_in 若IP地址或子网掩码格式非法则输出1,若IP1与IP2属于同一子网络输出0,若IP1与IP2不属于同一子网络输出2。 def is_valid_ip(s): if .. in s: return False for x in list(map(int, s.split(.))): if x < 0 or x > 255: return False return True def is_valid_mask(mask): if not is_valid_ip(mask): return False mask_bin = ip2bin(mask) if '0' not in mask_bin or '1' not in mask_bin or '01' in mask_bin: return False return True def int2bin(n): n_bin = bin(n).

牛客华为机试HJ40

原题传送门 1. 题目描述 2. Solution 1 import sys if sys.platform != linux: file_in = open(input/HJ40.txt) sys.stdin = file_in for line in sys.stdin: result = dict(letters=0, spaces=0, digits=0, other=0) s = line.strip() for c in s: if c.isalpha(): result['letters'] += 1 elif c == ' ': result['spaces'] += 1 elif c.isdigit(): result['digits'] += 1 else: result['other'] += 1 for v in result.values(): print(v)