zoukankan      html  css  js  c++  java
  • [题目][蓝桥杯PREV] 大合集

    【合集内容】

    PREV-8 至 PREV-14

    【空缺】

    PREV-11 PREV-12

    蓝桥杯 PREV-8 买不到的数目

    问题描述:

    小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。

    小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。

    你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。

    本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int n, m;
     5 
     6 int main() {
     7     cin >> n >> m;
     8     if (n > m) swap(n, m);
     9     cout << n * (n - 2) + (m - n) * (n - 1);
    10     return 0;
    11 }

    蓝桥杯 PREV-9 大臣的旅费

    问题描述:

    很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。

    为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。

    J是T国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情。他有一个钱袋,用于存放往来城市间的路费。

    聪明的J发现,如果不在某个城市停下来修整,在连续行进过程中,他所花的路费与他已走过的距离有关,在走第x千米到第x+1千米这一千米中(x是整数),他花费的路费是x+10这么多。也就是说走1千米花费11,走2千米要花费23。

    J大臣想知道:他从某一个城市出发,中间不休息,到达另一个城市,所有可能花费的路费中最多是多少呢?

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 #define MAXN 10005
     5 
     6 class Edge {
     7 public:
     8     int v, nxt, w;
     9 } e[MAXN];
    10 
    11 int n, u, v, w, dis[MAXN], mx, s, o, h[MAXN];
    12 
    13 void add(int u, int v, int w) {
    14     o++, e[o] = (Edge) {v, h[u], w}, h[u] = o;
    15 }
    16 
    17 void dfs(int o, int f) {
    18     for (int x = h[o]; x; x = e[x].nxt) {
    19         int v = e[x].v;
    20         if (v == f) continue;
    21         dis[v] = dis[o] + e[x].w;
    22         dfs(v, o);
    23     }
    24 }
    25 
    26 int main() {
    27     cin >> n;
    28     for (int i = 1; i < n; i++) {
    29         cin >> u >> v >> w;
    30         add(u, v, w), add(v, u, w);
    31     }
    32     dfs(1, 0);
    33     for (int i = 1; i <= n; i++)
    34         if (dis[i] > mx) mx = dis[i], s = i;
    35     memset(dis, 0, sizeof(dis)), mx = 0; 
    36     dfs(s, 0);
    37     for (int i = 1; i <= n; i++)
    38         mx = max(mx, dis[i]);
    39     cout << 10 * mx + mx * (mx + 1) / 2;
    40     return 0;
    41 }

    蓝桥杯 PREV-10 幸运数

    问题描述:

    幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成

    首先从1开始写出自然数1,2,3,4,5,6,....

    1 就是第一个幸运数。

    我们从2这个数开始。把所有序号能被2整除的项删除,变为:

    1 _ 3 _ 5 _ 7 _ 9 ....

    把它们缩紧,重新记序,为:

    1 3 5 7 9 .... 。这时,3为第2个幸运数,然后把所有能被3整除的序号位置的数删去。注意,是序号位置,不是那个数本身能否被3整除!! 删除的应该是5,11, 17, ...

    此时7为第3个幸运数,然后再删去序号位置能被7整除的(19,39,...)

    最后剩下的序列类似:

    1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, ...

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 #define MAXN 1000005
     5 
     6 int l, r, x, o, f, m, ans, a[MAXN];
     7 
     8 priority_queue <int, vector<int>, greater<int> > h;
     9 
    10 int main() {
    11     cin >> l >> r;
    12     for (int i = 1; i <= r; i++)
    13         h.push(i);
    14     a[1] = 2;
    15     while (1) {
    16         x = o = 0, m = a[++f];
    17         while (!h.empty()) {
    18             int t = h.top(); 
    19             x++, h.pop();
    20             if (x % m) a[++o] = t;
    21         }
    22         if (o == x) break;
    23         for (int i = 1; i <= o; i++)
    24             h.push(a[i]);
    25     }
    26     for (int i = 1; i <= o; i++)
    27         ans += l < a[i] && a[i] < r; 
    28     cout << ans;
    29     return 0;
    30 }

    蓝桥杯 PREV-13 网络寻路

    问题描述:

    X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径。

    源地址和目标地址可以相同,但中间节点必须不同。

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 #define MAXN 20005
     5 
     6 class Edge {
     7 public:
     8     int v, nxt;
     9 } e[MAXN];
    10 
    11 int u, v, n, m, ans, vis[MAXN], h[MAXN], o;
    12 
    13 void add(int u, int v) {
    14     e[++o] = (Edge) {v, h[u]}, h[u] = o;
    15 }
    16 
    17 void dfs(int o, int d, int s) {
    18     if (d == 3) {
    19         ans++;
    20         return;
    21     }
    22     for (int x = h[o]; x; x = e[x].nxt) {
    23         int v = e[x].v;
    24         if (!vis[v]) vis[v] = 1, dfs(v, d + 1, s), vis[v] = 0;
    25         else if (v == s && d == 2) dfs(v, d + 1, s);
    26     }
    27 }
    28 
    29 int main() {
    30     cin >> n >> m;
    31     for (int i = 1; i <= m; i++)
    32         cin >> u >> v, add(u, v), add(v, u);
    33     for (int i = 1; i <= n; i++)
    34         vis[i] = 1, dfs(i, 0, i), vis[i] = 0;
    35     cout << ans;
    36     return 0;
    37 }

    蓝桥杯 PREV-14 高僧斗法

    [题目][蓝桥杯PREV-14] 高僧斗法

  • 相关阅读:
    Spring-web初始化流程简图
    记一次升级Tomcat
    Spring-Task思维导图
    2019的第一个工作日
    RocketMQ专题2:三种常用生产消费方式(顺序、广播、定时)以及顺序消费源码探究
    RocketMQ专题1:入门
    博客搬家到云栖社区
    ActiveMQ专题2: 持久化
    ActiveMQ专题1: 入门实例
    linux下怎么卸载自带的JDK和安装想要的JDK
  • 原文地址:https://www.cnblogs.com/jinkun113/p/13823854.html
Copyright © 2011-2022 走看看