京东笔试

京东笔试 就A了一道

第二道就是简单的模拟啊 不知道为什么一个测试用例都不能通过

我的思路是

首先看两个物种是否相同 相同回合直接结束

两个都没有暴露 回合结束

不同的话 第一种情况是人的暴露了 直接开始战斗

第二种情况 人没有暴露 兽暴露了 决策后战斗 兽就死

靠 正准备写第三种情况 有一方已经死了也直接回合结束 才想起来代码里面没写

接着是第三题 背包问题 带有条件的背包问题 自己写的用例都过了 测试用例只有百分之五

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int N = in.nextInt();
        int T = in.nextInt();
        int[] t1 = new int[N];
        int[] t2 = new int[N];
        int[] s1 = new int[N];
        int[] s2 = new int[N];
        for(int i = 0; i < N; i ++){
            t1[i] = in.nextInt();
            s1[i] = in.nextInt();
            t2[i] = in.nextInt();
            s2[i] = in.nextInt();
        }
        int[] ans = solute(N, T, t1, t2, s1, s2);
        for(int i = 0; i < N; i ++){
            if(ans[i] == -1){
                System.out.print("F");
            }else if(ans[i] == 1){
                System.out.print("B");
            }else{
                System.out.print("A");
            }
        }
    }

    public static int[] solute(int N, int T, int[] t1, int[] t2, int[] s1, int[] s2){
        int[] ans = new int[N];
        int[][][] res = new int[T + 1][N][N];
        // 还是背包问题
        int[][] dp = new int[T + 1][N];
        // dp[i][j] i时间内代表前几门课中可以拿到的最高分
        for(int i = 1; i <= T; i ++){
            for(int j = 0; j < N; j ++){
                //两种情况装第一个或者装第二个 或者都不装
                int price1 = 0;
                int price2 = 0;
                int price3 = 0;
                if(j == 0){
                    if(i - t1[j] >= 0){
                        price1 = s1[j];
                    }
                    if(i - t2[j] >= 0){
                        price2 = s2[j];
                    }
                }else{
                    if(i - t1[j] >= 0){
                        price1 = dp[i - t1[j]][j - 1] + s1[j];
                    }
                    if(i - t2[j] >= 0){
                        price2 = dp[i - t2[j]][j - 1] + s2[j];
                    }
                    price3 = dp[i][j - 1];
                }
                int max = Math.max(price1, price2);
                max = Math.max(max, price3);
                if(max == price3){
                    if(j > 0){
                        res[i][j] = res[i][j - 1];
                    }
                    res[i][j][j] = -1;
                }else if(max == price2){
                    ans[j] = 1;
                    if(j > 0){
                        res[i][j] = res[i - t2[j]][j - 1];
                    }
                    res[i][j][j] = 1;
                }else{
                    ans[j] = 2;
                    if(j > 0)
                        res[i][j] = res[i - t1[j]][j - 1];
                    res[i][j][j] = 2;
                }
                dp[i][j] = max;
            }
        }
        return res[T][N - 1];
    }
}
#京东笔试#
全部评论
100 80 30完全无法理解用例到底是什么,真垃圾
2 回复 分享
发布于 2023-08-26 21:23 湖北
佬,看看realme手机秋招,全球Top5厂商,hc多多,岗位多多
1 回复 分享
发布于 2023-08-26 23:05 广东
请问楼主讲的这个是不是京东2h的那个笔试,笔试的题型是怎么样的,是2h然后搞这3道题没有别的题型吗
点赞 回复 分享
发布于 2024-03-07 16:19 山东
京东给你约面了吗
点赞 回复 分享
发布于 2023-09-02 17:43 湖北
约面了吗
点赞 回复 分享
发布于 2023-09-02 17:41 湖北
第二题测试样例有问题,得判断有无下一行输入再处理
点赞 回复 分享
发布于 2023-08-26 23:30 广东
我第三题最开始也5%,交卷之后重新做的,需要在dp数组上保存一下得分以及对应的每题做题情况才行,只根据打印出来的dp数组得不到每题的做题情况。
点赞 回复 分享
发布于 2023-08-26 22:53 天津
第三题一开始理解错题意了,以为是每道题必须选一种方法来做,然后就觉得不能用动规,只能回溯,最后回溯过了5%
点赞 回复 分享
发布于 2023-08-26 22:40 江苏
同物种的跳过,一方死了跳过,都隐藏跳过,剩下的battle,直接5%😂
点赞 回复 分享
发布于 2023-08-26 21:38 广东
第二题我ac了,没过的话还是有些地方条件判断有遗漏。 这样做可能会好一些: 1. if 种族相同 continue 2. 有一方die or两方全是隐藏身份,continue 3. 如果人类暴露身份,则发动战斗,依次判断战斗力等于,大于,小于 4. 如果兽族身份暴露,则按照人类逻辑来判断战斗力情况
点赞 回复 分享
发布于 2023-08-26 21:37 浙江
100 70 5
点赞 回复 分享
发布于 2023-08-26 21:36 上海
人和兽就过了10% 一直想不明白
点赞 回复 分享
发布于 2023-08-26 21:27 浙江
佬第一题是什么思路
点赞 回复 分享
发布于 2023-08-26 21:24 天津
第二题,仔细读题就会发现m没给数据范围,所以m会很大很大
点赞 回复 分享
发布于 2023-08-26 21:24 广西
来个大佬给我指出最后一题错误 我自己把背包问题可能出现的错误都模拟了一下 并没发现什么错误
点赞 回复 分享
发布于 2023-08-26 21:23 湖北
第一题不是没有固定答案的吗
点赞 回复 分享
发布于 2023-08-26 21:18 广东
package main import "fmt" const ( Human = "human" Monster = "monster" ) type Person struct { camp string attack int isAlive bool } func main() { num, round := 0, 0 fmt.Scan(&num, &round) allPerson := make([]*Person, num) camp, attack := "", 0 for i := 0; i < num; i++ { fmt.Scanf("%s %d\n", &camp, &attack) allPerson[i] = &Person{ camp: camp, attack: attack, isAlive: true, } } idx1, idx2, action1, action2 := 0, 0, "", "" for i := 0; i < round; i++ { fmt.Scanf("%d %d %s %s\n", &idx1, &idx2, &action1, &action2) a, b := allPerson[idx1-1], allPerson[idx2-1] if a.camp == b.camp || !a.isAlive || !b.isAlive || action1 == "N" && action2 == "N" { continue } if a.camp == Human && a.attack <= b.attack && action1 == "N" || a.camp == Monster && action2 == "N" { continue } a.isAlive = a.attack > b.attack b.isAlive = b.attack > a.attack } for i := 0; i < num; i++ { res := "Y" if !allPerson[i].isAlive { res = "N" } fmt.Printf("%s", res) } }
点赞 回复 分享
发布于 2023-08-26 21:17 广东
俺也一样 100% 0% 5%
点赞 回复 分享
发布于 2023-08-26 21:17 安徽
不给错误的测试用例,很难判断哪里错了
点赞 回复 分享
发布于 2023-08-26 21:16 广东
我也只过 5%
点赞 回复 分享
发布于 2023-08-26 21:14 广东

相关推荐

04-16 10:27
已编辑
美团_Saas_后端开发
今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,拿到美团offer那会感觉自己天都亮了。没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
评论
4
4
分享

创作者周榜

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