自用-牛客网-华为机试编程模拟题1-python

python 复制代码
import sys
  
s = input()
print(''.join(sorted(s)))
python 复制代码
import sys

def solve():
    input_data = sys.stdin.buffer.read().split()
    idx = 0
    T = int(input_data[idx]); idx += 1
    out = []
    
    for _ in range(T):
        N = int(input_data[idx]); idx += 1
        M = int(input_data[idx]); idx += 1
        
        a = []
        for i in range(N):
            row = []
            for j in range(M):
                row.append(int(input_data[idx])); idx += 1
            a.append(row)
        
        # 转置优化:让列数较小(状态位数少)
        if M > N:
            a = [list(row) for row in zip(*a)]
            N, M = M, N
        
        # 生成所有合法行状态(行内无左右相邻 1)
        states = []
        for s in range(1 << M):
            if (s & (s << 1)) == 0:
                states.append(s)
        S = len(states)
        
        # 预计算每一行每个状态的和
        # row_sum[i][k] = 第 i 行按 states[k] 选中的数字和
        row_sum = []
        for i in range(N):
            sums = [0] * S
            for k in range(S):
                s = states[k]
                total = 0
                for j in range(M):
                    if s & (1 << j):
                        total += a[i][j]
                sums[k] = total
            row_sum.append(sums)
        
        # 预计算兼容关系:compat[k] = 与 states[k] 兼容的上一行状态下标列表
        compat = [[] for _ in range(S)]
        for k in range(S):
            s = states[k]
            for t_idx in range(S):
                t = states[t_idx]
                if (t & s) == 0 and (t & (s << 1)) == 0 and (t & (s >> 1)) == 0:
                    compat[k].append(t_idx)
        
        # DP
        dp = row_sum[0][:]  # 第 0 行
        for i in range(1, N):
            ndp = [0] * S
            for k in range(S):
                best = 0
                for t_idx in compat[k]:
                    if dp[t_idx] > best:
                        best = dp[t_idx]
                ndp[k] = best + row_sum[i][k]
            dp = ndp
        
        out.append(str(max(dp)))
    
    sys.stdout.write("\n".join(out))

if __name__ == "__main__":
    solve()
python 复制代码
import sys

def solve():
    data = sys.stdin.buffer.read().split()
    idx = 0
    N = int(data[idx]); idx += 1
    M = int(data[idx]); idx += 1
    
    C = []
    for i in range(N):
        v = int(data[idx]); idx += 1
        C.append(v * v)
    
    C.sort()
    
    ans = float('inf')
    for i in range(N - M + 1):
        diff = C[i + M - 1] - C[i]
        if diff < ans:
            ans = diff
    
    print(ans)

if __name__ == "__main__":
    solve()
相关推荐
懿路向前2 小时前
唤醒工作台全实录(一):立项——化性起伪与三条设计原则
人工智能·华为
hhhjhl4 小时前
开源鸿蒙平台 KMP_CMP 三方库「Clikt」适配全流程
华为·开源·harmonyos
熊猫钓鱼>_>5 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
Goway_Hui5 小时前
【KMP for OpenHarmony】-- 在鸿蒙工程中使用 Apollo-Kotlin
华为·kotlin·harmonyos
frjc7 小时前
分布式服务拆分实战指南:从底层逻辑到面试话术
微服务·面试·职场和发展
考研保研资料分享7 小时前
2025生科保研北大直博:英语摘要、科研PPT与赶场复盘
面试
香蕉大香蕉(06敬畏市场)7 小时前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
ShineWinsu7 小时前
对于Qt:QCheckBox常见属性的详细解析
c++·qt·面试·笔试·gui·qcheckbox·多选框
师夷长技以自愈7 小时前
第 3 讲:多 Agent——Supervisor 分诊 + 专职 Worker
面试