changPeng @ 2023-03-15 01:34:46
像试试避开循环,用numpy做,还专门考虑了一些比较不规范的情况,但有四道题目一直WA,请教各位大佬可能会是什么问题
import numpy as np
code_input = input().strip().split(' ')
N = int(code_input.pop(0))
code_input = np.array(code_input, dtype=int)
code_input_cumsum = code_input.cumsum()
zero_end_index, zero_end_index_count = np.unique(code_input_cumsum[:-1:2], return_counts=True)
zero_beg_index, zero_beg_index_count = np.unique(code_input_cumsum[1:-1:2], return_counts=True)
code_output = np.zeros(N * N, dtype=int)
code_output[zero_end_index] = zero_end_index_count
code_output[zero_beg_index] = code_output[zero_beg_index] - zero_beg_index_count
print(str(code_output.cumsum().reshape(N, N)).translate({ord(ch):'' for ch in '[] '}))
by changPeng @ 2023-03-15 03:17:57
我不理解,如果把最后的输出换成循环就可以了
import numpy as np
code_input = input().strip().split(' ')
N = int(code_input.pop(0))
code_input = np.array(code_input, dtype=int)
code_input_cumsum = code_input.cumsum()
code_input_cumsum = code_input_cumsum[code_input_cumsum < N * N]
zero_end_index, zero_end_index_count = np.unique(code_input_cumsum[::2], return_counts=True)
zero_beg_index, zero_beg_index_count = np.unique(code_input_cumsum[1::2], return_counts=True)
code_output = np.zeros(N * N, dtype=int)
code_output[zero_end_index] = zero_end_index_count
code_output[zero_beg_index] = code_output[zero_beg_index] - zero_beg_index_count
for index, code in enumerate(code_output.cumsum()):
end = '' if (index+1) % N != 0 else '\n'
print(code, end=end)
by anonymous_letter @ 2023-03-15 08:05:05
@changPeng 会不会有一种可能,洛谷上没什么人会numpy,只有您才会。
by changPeng @ 2023-03-15 10:51:39
@fictitious_love 不至于不至于
by changPeng @ 2023-03-15 10:57:31
基本思路很简单,生成一个全零向量,然后将每一次开始 “1” 的位置设为 “1”,每一次重新开始 “0” 的位置设为 “-1”,通过 np.cumsum() 函数就能把 “1” 和 “-1” 间的元素填充为1,并把 “-1” 重新修正为0。