前言:这场的题解由于蓝桥杯比赛拖延几天才发

关于本篇题解,目前还是有部分题没有解答出来正在加油补题ing

补题链接:Here

A - Competition

题意:给定 Japanese Student Championship 2021 - 图1 代表的意义为,超市一以 Y 元卖 X 克食料包

现在超市二的一包食料包重 Japanese Student Championship 2021 - 图2 克,请问超市二的售价为多少才能比超市一便宜

思路:

理解一下题意就容易发现:Japanese Student Championship 2021 - 图3

B - Xor of Sequences

给定两个严格上升的整数序列 A,B,现求仅出现在A和B的数字,最后结果升序打印

思路:

由于两个序列数据范围不大,直接暴力循环即可

然后赛后看了一下高rank的代码发现了一个函数:set_symmetric_difference

set_symmetric_difference 可构造区间S1,S2的对称差集(出现于S1但不出现于S2的元素以及出现于S2但不出现于S1的元素);返回值为指向输出区间的尾端。

  1. void solve() {
  2. int n, m;
  3. cin >> n >> m;
  4. vector<int> A(n), B(m);
  5. for (int &x : A) cin >> x;
  6. for (int &x : B) cin >> x;
  7. vector<int> C;
  8. set_symmetric_difference(A.begin(), A.end(), B.begin(), B.end(), back_inserter(C));
  9. for (int x : C) cout << x << " ";
  10. }

C - Max GCD 2

题意:给定一个区间,问 Japanese Student Championship 2021 - 图4 求问最大的 Japanese Student Championship 2021 - 图5#card=math&code=gcd%28x%2Cy%29)

说实话,比赛的时候还真没想到这个方法。

思路:

由于数对 Japanese Student Championship 2021 - 图6#card=math&code=%28x%2Cy%29) 的个数最多 Japanese Student Championship 2021 - 图7 ,所以我们不可能计算每一对 Japanese Student Championship 2021 - 图8#card=math&code=%28x%2Cy%29) ,相反的、并考虑是非问题“是否存在一对 Japanese Student Championship 2021 - 图9#card=math&code=%28x%2Cy%29) 使得 Japanese Student Championship 2021 - 图10%20%3D%20c#card=math&code=gcd%20%28x%EF%BC%8Cy%29%20%3D%20c)?”

因为 Japanese Student Championship 2021 - 图11 是最大公约数,所以 Japanese Student Championship 2021 - 图12 都应该是 Japanese Student Championship 2021 - 图13 的倍数,相反如果在 Japanese Student Championship 2021 - 图14 区间中 Japanese Student Championship 2021 - 图15 的倍数多于两个值,则可以选择 Japanese Student Championship 2021 - 图16 使得 Japanese Student Championship 2021 - 图17%20%3D%20c#card=math&code=gcd%28x%2Cy%29%20%3D%20c) 成立

由于 Japanese Student Championship 2021 - 图18 所以运行速度会足够快

把上面的话转化为数学表达式:A ~ B 之间 C 的倍数 = (C 的倍数在 Japanese Student Championship 2021 - 图19 ~ Japanese Student Championship 2021 - 图20 之间) - (C 的倍数在 Japanese Student Championship 2021 - 图21 ~ Japanese Student Championship 2021 - 图22 之间)= Japanese Student Championship 2021 - 图23

再转化一下就是检查 Japanese Student Championship 2021 - 图24


  1. void solve() {
  2. int A, B;
  3. cin >> A >> B;
  4. for (int c = B;; c--)
  5. if ((A + c - 1) / c < B / c) {
  6. cout << c << endl;
  7. return;
  8. }
  9. }

D - Nowhere P

给定质数 Japanese Student Championship 2021 - 图25 ,求有多少序列 Japanese Student Championship 2021 - 图26#card=math&code=%28A_1%2CA_2%2C%5Cdots%2CA_N%29) 满足:

Japanese Student Championship 2021 - 图27%0A#card=math&code=%5Cforall%20i%5Cin%5B1%2Cn%5D%5Cmathbb%7BN%7D%2C%5Csum%7Bj%20%3D%201%7D%5Ei%20A_j%20%5Cnot%20%5Cequiv%200%5C%20%28mod%5C%20P%29%0A)

显然,当 Japanese Student Championship 2021 - 图28 时答案为 Japanese Student Championship 2021 - 图29 ,对应合法序列为 Japanese Student Championship 2021 - 图30%2C(2)%2C%5Cdots%2C(p%20-%201)#card=math&code=%281%29%2C%282%29%2C%5Cdots%2C%28p%20-%201%29)

之后在这些合法序列后插入新数时,每个序列都有且仅有一个数使得这个数插入后该序列非法(该数即为 Japanese Student Championship 2021 - 图31%5C%20mod%5C%20p#card=math&code=%28-%5Csum_ia_i%29%5C%20mod%5C%20p)

故答案为:Japanese Student Championship 2021 - 图32(p-2)%5E%7BN-1%7D#card=math&code=%28p%20-1%29%28p-2%29%5E%7BN-1%7D)

跑 qpow 的时候记得取模

  1. const int mod = 1e9 + 7;
  2. ll qpow(ll a, ll b) {
  3. ll ans = 1;
  4. a %= mod;
  5. for (; b; b >>= 1, a = a * a % mod)
  6. if (b & 1) ans = ans * a % mod;
  7. return ans;
  8. }
  9. void solve() {
  10. ll N, P;
  11. cin >> N >> P;
  12. cout << (P - 1) * qpow(P - 2, N - 1) % mod;
  13. }

E - Level K Palindrome

本题所有的字符串均指只由小写英文字母构成的字符串

对字符串 Japanese Student Championship 2021 - 图33,

  • 定义其反转为: Japanese Student Championship 2021 - 图34#card=math&code=%5Coperatorname%7Brev%7D%28s%29), 则 Japanese Student Championship 2021 - 图35 是回文串 Japanese Student Championship 2021 - 图36 Japanese Student Championship 2021 - 图37#card=math&code=s%20%3D%20rev%28s%29)
  • Japanese Student Championship 2021 - 图38 运算定义为字符串的拼接
  • 定义字符串上的变换为:将其中某一字符替换为一小写英文字母

定义 Japanese Student Championship 2021 - 图39 阶回文串如下:

  • 空串,非回文串为 Japanese Student Championship 2021 - 图40 阶回文串
  • Japanese Student Championship 2021 - 图41 阶非空回文串 Japanese Student Championship 2021 - 图42 定义 Japanese Student Championship 2021 - 图43#card=math&code=s%20%2B%20rev%28s%29) 为 Japanese Student Championship 2021 - 图44 阶回文串
  • Japanese Student Championship 2021 - 图45 阶非空回文串 Japanese Student Championship 2021 - 图46 和单个字符 Japanese Student Championship 2021 - 图47 Japanese Student Championship 2021 - 图48#card=math&code=s%20%2B%20c%20%2B%20rev%28s%29) 为 Japanese Student Championship 2021 - 图49 阶回文串

给一字符串 Japanese Student Championship 2021 - 图50 问至少经几次变换可使其恰好为 Japanese Student Championship 2021 - 图51 阶回文串

解题思路

显然,若有解则 Japanese Student Championship 2021 - 图52 不可能过大

待补

F - Max Matrix

有一个长为 Japanese Student Championship 2021 - 图53 的全零序列 Japanese Student Championship 2021 - 图54 和长为 Japanese Student Championship 2021 - 图55 的全零序列 Japanese Student Championship 2021 - 图56 ,对其做如下操作

  • Japanese Student Championship 2021 - 图57 中的某个数赋一个值
  • Japanese Student Championship 2021 - 图58 中的某个数赋一个值

这两种操作一共进行 Japanese Student Championship 2021 - 图59次,要求每次操作后都要输出

Japanese Student Championship 2021 - 图60

待补

G - Spanning Tree

有n个点,考虑以这n个点为顶点,满足如下条件的所有图:

  • 无向图
  • 给出一个矩阵 Japanese Student Championship 2021 - 图61

    • Japanese Student Championship 2021 - 图62,则点 Japanese Student Championship 2021 - 图63 和点 Japanese Student Championship 2021 - 图64 间没有边
    • Japanese Student Championship 2021 - 图65,则点 Japanese Student Championship 2021 - 图66 和点 Japanese Student Championship 2021 - 图67 间没有边
    • Japanese Student Championship 2021 - 图68,则为上述两种情况的任-种

求这些图中树的个数

思路

首先,考虑所以已经存在的边构成的图,如果有环了,则答案一定为0,否则森林中的每个树都可缩成一个点,之后用矩阵树定理即可

H - Shipping

给一个带权无向图,求满足如下条件的子图的最小边权和

Japanese Student Championship 2021 - 图69%20%5Cnot%3D%20%E2%88%9E%0A#card=math&code=%5Cforall%20%5Cin%5B1%2CM%5D_%5Cmathbb%7BN%7D%2Cdis%28x_i%2Cy_i%29%20%5Cnot%3D%20%E2%88%9E%0A)