8.7 疯狂游戏 笔试真题

先上代码

第一题 大数取余

#include <iostream>
using namespace std;
long long strToInt(string str){
    long long res = 0;
    for(auto &it:str)
        res = res * 10 + it-'0';
    return res;
}
int main(){
    string m;
    long long n;
    cin >> m >> n;
    // Long long 最多支持 19位数, 就按照正常取余的过程,一步一步来即可
    while(m.size() > 18){
        string tem = m.substr(0,18);
        long long num = strToInt(tem);
        long long re = num % n;
        m = to_string(re) + m.substr(18);
    }
    cout << strToInt(m) % n << endl;
}

这个题适合用 JAVA 来写,直接调用 API

import java.math.BigInteger;
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        BigInteger m = scanner.nextBigInteger();
        BigInteger n = scanner.nextBigInteger();
        BigInteger z = m.mod(n);
        System.out.println(z);
    }
}

第二题 小鹅冲冲冲

把经过的补给站都放到一个优先级队列里,每次补给
题目里的补给站的距离是距离终点的距离,这一块儿一定要看清

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main(){
    int n, M, E;
    cin >> n >> M >> E;
    priority_queue<int> que;
    vector<pair<int,int>> arr(n);
    for(int i=0; i<n; i++)
        cin >> arr[i].first >> arr[i].second;
    sort(arr.begin(), arr.end());
    // ind 表示走到第几个补给站了   cur  表示离终点的距离,为 0 时,到达终点, res 记录去了几次补给站
    int ind = arr.size()-1, cur = M-E, res = 0;

    // 先把第一次能经过的补给站入堆
    while(ind >=0 && arr[ind].first >= cur)
        que.push(arr[ind--].second);

    // 进入补给站
    while(!que.empty() && cur > 0){
        res++;
        cur -= que.top();
        que.pop();

        // 遍历可能经过的补给站
        while(ind >=0 && arr[ind].first >= cur)
            que.push(arr[ind--].second);
    }
    if(cur > 0) cout << "-1" << endl;
    else cout << res << endl;

    return 0;
}

题目

第一题

图片说明

第二题

图片说明

图片说明

#笔试题目##豪腾嘉科Hortor Games#
全部评论
刚哥稳!
点赞 回复
分享
发布于 2019-08-07 21:44
66666
点赞 回复
分享
发布于 2019-08-07 21:59
联想
校招火热招聘中
官网直投
第二题套路啊,看到后不假思索递归/dp,写完发现不对劲。题目说跑酷游戏,则可理解为起点到终点是大多手游那样七弯八拐的,途中必须依次经过所有补给站,但可以选择补给或不补给;另一种理解方式应该才是题目真正要问的,也是题主给出的解法,即:起点到终点就一个空旷大平台,补给站随机分布,起点到终点不需要依次经过所有补给站。我按照第一种理解方式写完动态规划和题主一比对发现不对劲,太太套路了
点赞 回复
分享
发布于 2019-08-07 23:00
大佬,我问一下。如果这样的策略下来,按照这个例子,是不是进入的补给站顺序和给出例子的顺序不相同?
点赞 回复
分享
发布于 2019-08-08 15:18

相关推荐

5 41 评论
分享
牛客网
牛客企业服务