今晚牛客模拟题编程讨论

求分享一波牛客模拟题  牛牛吃雪糕,牛牛取快递 思路和代码#笔试题目#
全部评论
参考代码:https://www.nowcoder.com/discuss/82301 在线练习:https://www.nowcoder.com/test/10714908/summary
点赞 回复
分享
发布于 2018-05-24 17:20
20分钟全a的路过。。。第二题的话优先合并3和2,每2个3组一个,每3个2组一个。最后看落单的,如果有落单的3看有没有一个1和一个2或者3个1有就合并,剩下的2和1随便合并,第三题的话裸的最短路。。不懂可以上网搜dijkstra或者spfa
点赞 回复
分享
发布于 2018-05-23 23:26
联想
校招火热招聘中
官网直投
import java.util.Scanner; public class DoMain { public static void main(String[] args) { Scanner in = new Scanner(System.in); int T = in.nextInt(); int[][] array = new int[T][4]; for (int i = 0; i < T; i++) { array[i][0] = in.nextInt(); array[i][1] = in.nextInt(); array[i][2] = in.nextInt(); array[i][3] = in.nextInt(); } foo(array); } public static void foo(int[][] arr) { System.out.println(arr.length); for (int i = 0; i < arr.length; i++) { while (true) { if (arr[i][0] == 0) { System.out.println("Yes"); break; } else if (arr[i][0] == -1) { System.out.println("No"); break; } arr[i] = cal(arr[i]); } } } public static int[] cal(int[] ar) { if (ar[3] >= 2) { ar[3] -= 2; ar[0] -= 1; } else if (ar[3] == 1 && ar[2] >= 1 && ar[1] >= 1) { ar[3] -= 1; ar[2] -= 1; ar[1] -= 1; ar[0] -= 1; } else if (ar[3] == 1 && ar[2] == 0 && ar[1] >= 3) { ar[3] -= 1; ar[1] -= 3; ar[0] -= 1; } else if (ar[3] == 0 && ar[2] >= 3) { ar[2] -= 3; ar[0] -= 1; } else if (ar[3] == 0 && ar[2] == 2 && ar[1] >= 2) { ar[2] -= 2; ar[1] -= 2; ar[0] -= 1; } else if (ar[3] == 0 && ar[2] == 1 && ar[1] >= 4) { ar[2] -= 2; ar[1] -= 4; ar[0] -= 1; } else if (ar[3] == 0 && ar[2] == 0 && ar[1] >= 6) { ar[1] -= 6; ar[0] -= 1; } else { ar[0] = -1; } return ar; } } 吃雪糕这个懒得想,直接穷举所有可能,取快递那个应该是用栈来做的,后面修改过,但是还没有来得及提交,就GG了
点赞 回复
分享
发布于 2018-05-23 21:07
牛牛吃雪糕只过了10%,,,,顶!!有没有A的
点赞 回复
分享
发布于 2018-05-23 21:09
没有参加到考试,现在还有什么方式找到题目吗
点赞 回复
分享
发布于 2018-05-23 22:24
A了2.5 1)吃雪糕,因为1份的最灵活,可以吃6盒,也可以补充2份和3份的空缺,因此先不管,先把2份和3份的处理完 /** * 具体的记不太清了,凭记忆打的,这题AC了 */ #include <bits/stdc++.h> using namespace std; static int speed_up = []() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return 0; }(); int main() { int N, A, B, C; cin >> N >> A >> B >> C; int days = B / 3 + C / 2; // 3盒2份的和2盒3份的先吃 B %= 3; C %= 2; // 剩余的 if (C == 0) {   if (B == 1) { // 则需要4盒1份的   if (A >= 4) { A -= 4; days += 1; } } else if (B == 2) { // 则需要2盒1份的 if (A >= 2) { A -= 2; days += 1; } } } else if (C == 1) { if (B == 0) { if (A >= 3) { A -= 3; days += 1; } } else if (B == 1) { if (A >= 1) { A -= 1; days += 1; } } else { if (A >= 5) { A -= 5; days += 2; } else if (A >= 1) { A -= 1; days += 1; } } } days += A / 6; // 再吃1份的 if (days >= N) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; } 2)快递,这里我的思路是当成有向图来求最短路径,采取Dijkstra算法。 /** * 这道题A了50%,DEBUG了好久也不知道哪里错了,难受,有大佬看到可以帮忙指正一下,多谢 */ #include <bits/stdc++.h> using namespace std; static int speed_up = []() {     std::ios::sync_with_stdio(false);     std::cin.tie(nullptr);     return 0; }(); int main() {     int N, M, S, T;     cin >> N >> M >> S >> T;     unordered_map<int, unordered_map<int, int>> map;     unordered_set<int> points;     int start, end, distance, forward, backward;          for (int i = 0; i < M; ++i) {         cin >> start >> end >> distance;         map[start][end] = distance;         points.insert(start);         points.insert(end);     }          // dijkstra     unordered_map<int, int> visited, unvisited;     visited[T] = 0;     for (auto &pos : points) {         if (pos != T) {             unvisited[pos] = INT_MAX;         }     }               while (!unvisited.empty()) {         int cur = INT_MAX, point;         for (auto &start : unvisited) {             int min_dis = INT_MAX;             for (auto &end : map[start.first]) {                 if (visited.count(end.first)) {                     min_dis = min(min_dis, end.second + visited[end.first]);                 }             }             if (min_dis < cur) {                 cur = min_dis;                 point = start.first;             }         }         visited[point] = cur;         unvisited.erase(point);         if (point == S) {             break;         }     }     forward = visited[S];          visited.clear();     unvisited.clear();          visited[S] = 0;     for (auto &pos : points) {         if (pos != S) {             unvisited[pos] = INT_MAX;         }     }     while (!unvisited.empty()) {         int cur = INT_MAX, point;         for (auto &start : unvisited) {             int min_dis = INT_MAX;             for (auto &end : map[start.first]) {                 if (visited.count(end.first)) {                     min_dis = min(min_dis, end.second + visited[end.first]);                 }             }             if (min_dis < cur) {                 cur = min_dis;                 point = start.first;             }         }         visited[point] = cur;         unvisited.erase(point);         if (point == T) {             break;         }     }     backward = visited[T];     cout << forward + backward << endl;          return 0; }
点赞 回复
分享
发布于 2018-05-23 22:47
//吃雪糕的其实很简单啊,先设想一下,如果没有3,全是1和2,那只要雪糕够用就随便吃,因为吃不冒,所以要解决3,看3的个数对2求余是否为1,若为0,则剩下的1和2还是随便吃,若为1,则需要看现在的1和2的数量能不能把这天补上,或者能不能不要这落单的3 #include<iostream> #include<string> #include<cmath> #include<vector> #include<algorithm> #include<queue> #include "stdlib.h" using namespace std; int main(){ int t; cin>>t; while(t--){  int n,a,b,c;  cin>>n>>a>>b>>c; if(a+2*b+c*3<n*6){      cout<<"No"<<endl;     }else{   if(c%2==0||c*3>=n*6){    cout<<"Yes"<<endl;   }   else{    if(a==0&&b!=0){     if(c*3+2*b-3>=n*6){      cout<<"Yes"<<endl;     }     else{      cout<<"No"<<endl;      }    }    else{    cout<<"Yes"<<endl;    }    }   } } }
点赞 回复
分享
发布于 2018-05-24 10:05
个人的吃雪糕求解 package com.wxf.exam.write; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.concurrent.SynchronousQueue; public class SolveSecondQuestion {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         int n = sc.nextInt();         List<Obj> list = new ArrayList<>();         Obj o = null;         for (int i = 0; i < n; i++) {             o = new Obj();             o.highDay = sc.nextInt();             o.one = sc.nextInt();             o.two = sc.nextInt();             o.three = sc.nextInt();             list.add(o);         }         // for (Obj oo : list)         // System.out.println(oo);         for (Obj oo : list)             isSafeDurHighDay(oo);     }     /**      * 是否安全度过高温天气      *       * @param oo      */     private static void isSafeDurHighDay(Obj oo) {         // TODO Auto-generated method stub         int one = oo.one;         int two = oo.two;         int three = oo.three;         int highDay = oo.highDay;         int count = 6;         int i;         int flag = 0; //        System.out.println(oo);         if (highDay * 6 <= one + two * 2 + three * 3) {             // 在大的前提下,再去判断             for (i = 1; i <= highDay; i++) {                 count = 6;                 while (count > 0 && (three > 0 || two > 0 || one > 0)) {                     flag = 0;                     while (count - 3 >= 0 && three > 0) {                         count -= 3;                         three--;                         flag++;                     }                     while (count - 2 >= 0 && two > 0) {                         count -= 2;                         two--;                         flag++;                     }                     while (count - 1 >= 0 && one > 0) {                         count -= 1;                         one--;                         flag++;                     }                     if (flag == 0) {                         break;                     }                 }                 if (count > 0) {                     System.out.println("No");                     break;                 }             }             if (i > highDay)                 System.out.println("Yes");         } else {             System.out.println("No");         }     } } /**  * @author Administrator  *  */ class Obj {     public int highDay;     public int one;     public int two;     public int three;     @Override     public String toString() {         return "(" + highDay + "," + one + ", " + two + ", " + three + ")";     } } //4  //1 1 1 1  //2 0 0 4  //3 0 2 5  //4 24 0 0
点赞 回复
分享
发布于 2018-05-24 10:16

相关推荐

头像
不愿透露姓名的神秘牛友
04-02 21:36
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务