[题目][蓝桥杯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] 高僧斗法

posted @ 2020-10-15 23:38  jinkun113  阅读(230)  评论(0编辑  收藏  举报