网易互娱笔试第三题

网易互娱笔试第三题喝咖啡,做了快两个小时一直是0%,各位看看哪里逻辑错了?第四题看了题意觉得做不出来就交了
import java.util.Scanner;

public class Main3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //T组测试样例
        int T = sc.nextInt();
        int[] res = new int[T];
        while (T > 0) {
            T--;
            int k = sc.nextInt();
            int m = sc.nextInt();
            int[] gameDay = new int[m];
            for (int i = 0; i < m; i++) {
                gameDay[i] = sc.nextInt();
            }
            int maxCoffeeDay = maxCoffeeDay(k, gameDay);
            res[T] = maxCoffeeDay;
        }
        for (int i = res.length - 1; i >= 0; i--) {
            System.out.println(res[i]);
        }
        sc.close();
    }

    /**
     * 喝咖啡最多的天数
     * @param k
     * @param gameDays
     * @return */
    private static int maxCoffeeDay(int k, int[] gameDays) {
        if (gameDays == null || gameDays.length == 0 || k == 0) {
            return 30 / (k+1);
        }
        int maxDays = 0;
        // 统计第一个游戏日期之前能喝咖啡多少天
        if (gameDays[0] % (k+1) == 0) {
            maxDays += (gameDays[0] / (k+1)) - 1;
        } else {
            maxDays += (gameDays[0] / (k+1));
        }
        // 统计最后一个游戏日期之后还能喝几杯
        maxDays += (30-gameDays[gameDays.length-1]) / (k+1);
        //将游戏第一天加入
        maxDays++;
        for (int i = 1; i < gameDays.length; i++) {
            int curVal = gameDays[i];

            // 统计当前游戏日期与上一个游戏日期之间能喝多少杯
            int pre = gameDays[i-1];
            int cur = curVal;
            int curCount = (cur - pre) / (k + 1) - 1;
            maxDays += curCount;
            // 游戏日期也要喝一杯
            maxDays++;
        }
        return maxDays;
    }
}


#网易##笔试题目#
全部评论
29 0为啥可以喝两天啊
点赞 回复 分享
发布于 2019-09-07 21:45
有人能发一下JAVA的代码给小弟参考下吗? 我总是自测能过,提交案例通过率0%
点赞 回复 分享
发布于 2019-09-07 21:44
咋只看到三题,还有第四题的嘛
点赞 回复 分享
发布于 2019-09-07 21:41
脑子里完全是在想 testcase,服气。 
点赞 回复 分享
发布于 2019-09-07 21:35
我第1,3题A了,第二题时间不够了,卧槽
点赞 回复 分享
发布于 2019-09-07 21:32
我也是啊,佛了,测试样例全过,自己想了好几个也过了,然后一个没A,NMDWSM
点赞 回复 分享
发布于 2019-09-07 21:32
/* *** 代码是写给人看,顺带让机器执行 *** * *** 永远不要相信任何传进来的参数 *** * * 文件: practice_02.hpp * 时间: 9/7/2019-6:50 PM * 作者: Pip */ #include <bits/stdc++.h> using namespace std; int getCount(vector<bool> &coffee) { int ret = 0; for (bool it :coffee) { if (it) ++ret; } return ret; } void dp(vector<bool> &coffee, int &k, int index, int &sum) { if (index >= 30) { return; } int step = 0; bool sign = false; // [1 .. step .. 1] for (int i = index + 1; i < 30; ++i) { if (coffee[i]) { sign = true; break; } ++step; } if (step > 2 * k) { coffee[index + k + 1] = true; sum += 1; index = index + k + 1; } else { if (sign) { index = index + step + 1; } } dp(coffee, k, index, sum); } int main() { int t = 0; // 样例个数 int k = 0; // 最小间隔 int m = 0; // 固定喝咖啡的日子 int day = 0; int sum = 0; cin >> t; for (int i = 0; i < t; ++i) { cin >> k >> m; vector<bool> coffee(30 + k + 1, false); for (int j = 0; j < m; ++j) { cin >> day; coffee[day + k] = true; } sum = m; // dp(coffee, k, 0, sum); for (int l = k + 1; l < coffee.size(); ++l) { if (coffee[l]) { continue; } bool add = true; for (int j = 1; j <= k; ++j) { if ((l - j >= 0) && coffee[l - j]) { add = false; break; } else if((l + j < coffee.size()) && coffee[l + j]) { add = false; break; } } if (add) { coffee[l] = true; ++sum; } } if (i + 1 == t) { cout << sum; } else { cout << sum << endl; } } return 0; } /* 4 0 10 1 2 3 4 5 6 7 8 9 10 1 15 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 1 7 5 9 13 17 21 25 29 1 0 */
点赞 回复 分享
发布于 2019-09-07 21:32
100 100 0 0有跟我一样菜的吗
点赞 回复 分享
发布于 2019-09-07 21:31
这个需要考虑的特别多... 我怎么都是0% 最后发现一小块写错了 这个有点坑,只要第一个示例是错的那就是0%,即使剩下99%全对... 具体我想了三个可能被忽略的测试用例 如果这三个可以跑通那估计就没啥问题了 3 8 1 15 //输出3 30 0 //输出1 29 0//输出2
点赞 回复 分享
发布于 2019-09-07 21:31
你第二题怎么做的?
点赞 回复 分享
发布于 2019-09-07 21:31
很懵逼。
点赞 回复 分享
发布于 2019-09-07 21:31
我和你一样
点赞 回复 分享
发布于 2019-09-07 21:29
给你个样例 k=4 m=0 你的答案是30/4=7吧? 实际上算一下可以有8天,所以不是仅仅除以4那么简单,要看30/4的余数是多少,根据余数来判断要不要最后+1,如果余数是大于0,都要30/(k+1)+ 1。 上面这种是m=0的情况,m大于0也要考虑上述情况,考虑完了就可以ac了
点赞 回复 分享
发布于 2019-09-07 21:28
这个只要考虑在必须喝的连续两天判断是不是可以插入几杯咖啡就可以了,开始和结尾另处理
点赞 回复 分享
发布于 2019-09-07 21:27

相关推荐

评论
点赞
2
分享

创作者周榜

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