米哈游笔试 米哈游秋招

笔试时间:2025年8月24日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

在一段史诗般的冒险游戏中,米小游制定了 n 天的任务计划,其中第 i 天目标是收集 aᵢ个魔法晶体;然而,实际第 i 天他收集了 bᵢ个晶体。

为了平衡游戏难度,系统设定如下惩罚机制:

如果第 i 天满足 bᵢ<aᵢ且到第 i 天为止的累计实际收集总量不少于累计目标总量,则需要额外消耗 aᵢ - bᵢ个能量点;

如果第 i 天满足 bᵢ<aᵢ且到第 i 天为止的累计实际收集总量小于累计目标总量,则需要额外消耗 2×(aᵢ - bᵢ) 个能量点。

请计算米小游总共需要额外消耗多少个能量点,以完成整个冒险。

输入描述

第一行输入一个整数 n,表示冒险天数,满足 1≤n≤2×10⁵。

第二行输入 n 个整数 a₁,a₂,…,aₙ,表示每天的目标晶体数,满足 1≤aᵢ≤10⁹。

第三行输入 n 个整数 b₁,b₂,…,bₙ,表示每天的实际晶体数,满足 1≤bᵢ≤10⁹。

输出描述

输出一个整数,表示总额外消耗的能量点数。

样例输入

3

2 1 3

1 2 2

样例输出

4

参考题解

C++:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    vector<long long> a(n), b(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < n; i++) {
        cin >> b[i];
    }
    
    long long totalPenalty = 0;
    long long cumulativeTarget = 0;
    long long cumulativeActual = 0;
    
    for (int i = 0; i < n; i++) {
        cumulativeTarget += a[i];
        cumulativeActual += b[i];
        
        if (b[i] < a[i]) {
            long long diff = a[i] - b[i];
            if (cumulativeActual >= cumulativeTarget) {
                totalPenalty += diff;
            } else {
                totalPenalty += 2 * diff;
            }
        }
    }
    
    cout << totalPenalty << endl;
    return 0;
}

Java:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        long[] a = new long[n];
        long[] b = new long[n];
        
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextLong();
        }
        for (int i = 0; i < n; i++) {
            b[i] = sc.nextLong();
        }
        
        long totalPenalty = 0;
        long cumulativeTarget = 0;
        long cumulativeActual = 0;
        
        for (int i = 0; i < n; i++) {
            cumulativeTarget += a[i];
            cumulativeActual += b[i];
            
            if (b[i] < a[i]) {
                long diff = a[i] - b[i];
                if (cumulativeActual >= cumulativeTarget) {
                    totalPenalty += diff;
                } else {
                    totalPenalty += 2 * diff;
                }
            }
        }
        
        System.out.println(totalPenalty);
        sc.close();
    }
}

Python:

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

total_penalty = 0
cumulative_target = 0
cumulative_actual = 0

for i in range(n):
    cumulative_target += a[i]
    cumulative_actual += b[i]
    
    if b[i] < a[i]:
        diff = a[i] - b[i]
        if cumulative_actual >= cumulative_target:
            total_penalty += diff
        else:
            total_penalty += 2 * diff

print(total_penalty)

第二题

米小游和 Zeeman 又在玩游戏了。他们他们面前有 n 堆石子,其中第 i 堆有若干个石子。两人需要轮流从这些石子里面取,由米小游先行。轮到某个玩家取石子时,必须满足以下规则:

首先,玩家选择一个下标 i,且这堆的石子数大于 1;

接下来,玩家需要选择一个正整数 d,满足 d 比这堆的石子数小,并且这堆的石子数能被 d 整除(换句话说,找到一个比这堆石子数小且能整除这堆石子数的正整数 d),并从第 i 堆里取走 d 个石子。如果没有任何满足条件的 d,就不可以选择这一堆。

如果轮到某个玩家时,他无法取走任何石子,则另一个玩家胜利。如果米小游和 Zeeman 都采取最佳策略,请你判断游戏的胜者。

输入描述

输入包含多组测试数据。

第一行输入一个整数 T,表示数据组数,满足 1 ≤ T ≤ 10⁴。

每组测试数据描述如下:第一行输入一个整数 n,表示石子堆数,满足 1 ≤ n ≤ 2×10⁵;第二行输入 n 个整数,依次表示每堆石子的数量,满足每堆石子数大于等于 1 且小于 2³⁰。

保证单个测试文件的所有 n 之和不超过 2×10⁵。

输出描述

对于每组测试数据,输出一行一个字符串:如果米小游是胜者,则输出 Baobao,否则输出 Zeeman。

样例输入

5

2

4 4

1

2

2

114514 1919810

5

16 48 22 12 24

2

4 2

样例输出

Zeeman

Baobao

Zeeman

Zeeman

Baobao

参考题解

这是一个基于尼姆博弈 (Nim Game) 的变种。核心思想:将每堆石子看作一个独立的子游戏。整个游戏的胜负取决于所有子游戏 "状态值" (即 SG 值) 的异或和。异或和规则:如果所有堆的 SG 值异或和不为 0,则先手必胜;如果为 0,则后手必胜。SG 值计算:对于一堆数量为 a 的石子:如果 a 是奇数,它的 SG 值为 0。如果 a 是偶数,它的 SG 值等于 a/2 这个数在二进制下末尾 0 的个数加 1。代码的逻辑就是计算所有偶数堆的 SG 值,然后将它们全部异或起来,根据最终结果判断胜负。

C++:

#include <iostream>
#include <cstdint>
using namespace std;

int main() {
    int T;
    cin >> T;
    while (T-- > 0) {
        int n;
        cin >> n;
        int nimSum = 0;
        for (int i = 0; i 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务