OPPO
P5226.第2题-最小信号功率
第2题-最小信号功率 - problem_ide - CodeFun2000
学一下数学技巧
题意转化
$$
P-|i-c|\ge r_i \rightarrow P\ge r_i+|i-c|
$$
绝对值不等式
$$
P\ge\max\left(\max_i(r_i+i)-c,\;\max_i(r_i-i)+c\right)
$$
再分别取最大
$$
A=\max_i(r_i+i),\qquad B=\max_i(r_i-i)
$$
整个问题瞬间变成
$$
\min_c \max(A-c,\ B+c)
$$
所以要让两者的最大值尽可能小,最佳位置就是让二者尽量相等
$$
P_{\min}=\left\lceil\frac{A+B}{2}\right\rceil
$$
进而得到 c
$$
c=\left\lfloor\frac{A-B}{2}\right\rfloor
$$
P5221.第2题-监测样本偏离判定
第2题-监测样本偏离判定 - problem_ide - CodeFun2000
了解PCA的写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| import numpy as np import json import sys from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA
def main(): data = json.loads(sys.stdin.read())
train = data["train"] test = data["test"]
X = np.array(train, dtype = float) T = np.array(test, dtype= float)
means = np.nanmean(X, axis = 0)
row, col = np.where(np.isnan(X)) X[row, col] = means[col]
row, col = np.where(np.isnan(T)) T[row, col] = means[col]
scaler = StandardScaler() X_scaled = scaler.fit_transform(X) T_scaled = scaler.transform(T)
pca = PCA(n_components=0.95, svd_solver="full") pca.fit(X_scaled)
X_rebuild = pca.inverse_transform(pca.transform(X_scaled)) T_rebuild = pca.inverse_transform(pca.transform(T_scaled))
train_error = np.sum((X_scaled - X_rebuild)**2, axis= 1) test_error = np.sum((T_scaled - T_rebuild)**2, axis=1)
threshold = np.percentile(train_error, 95) ans = (test_error > threshold).astype(int).tolist() print(json.dumps(ans))
if __name__ == "__main__": main()
|
sklearn 逻辑:
1 2 3 4 5
| model = Something(...) # 创建工具 / 设置超参数 model.fit(X) # 从 X 学参数 model.transform(X) # 用学到的参数转换 X model.fit_transform(X) # 先学,再转换 X model.inverse_transform(Z) # 把转换后的数据尽量映射回原来的空间
|
json 常用函数
| 函数 |
输入 |
输出 |
json.loads() |
JSON 字符串 |
Python 对象 |
json.dumps() |
Python 对象 |
JSON 字符串 |
json.load() |
JSON 文件 |
Python 对象 |
json.dump() |
Python 对象 |
JSON 文件 |