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; }
点赞 评论

相关推荐

头像
05-12 09:14
点赞 评论 收藏
转发

牛客热帖

牛客网
牛客企业服务