网易互娱笔试第三题

网易互娱笔试第三题喝咖啡,做了快两个小时一直是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

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
最喜欢秋天的火龙果很...:第一份工作一定要往大的去,工资低点没事。后面换工作会更好找,即使你去小公司,你也不可能不会换工作的。所以找大的去
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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