2019年第十届蓝桥杯程序设计大赛国赛C++大学B组题解

2023-11-11

目录

A.平方序列

B.质数拆分

D.求值

E.路径计数

F.最优包含

G.排列数

H.解谜游戏

I.第八大奇迹


A.平方序列

题目解析:

题意很直白,我们可以暴力枚举x,y(2019<x<y),x,y应满足条件x^{2} - 2019^{2} == y^{2} - x^{2} (等差数列的判断条件)然后记录x+y=最小值,最后将该值输出

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    int x = 0, y = 0;
    int sum = 0x3f3f3f3f;
    for(int i = 2019 + 1; i <= 10000 ; i ++)
        for(int j = i + 1; j <= 10000; j ++)
        {
            if(i * i - 2019 * 2019 == j * j - i * i)
                sum = min(i + j, sum);
        }
    
    cout << sum << endl;
    return 0;
}

答案:7020

B.质数拆分

题目解析:

题意:求2019拆分为若干个不同质数之和的方案数

分析:我们可以先求出1-2019的所有质数,将该问题转换为从1-2019的质数中选,总和为2019的所有方案。这时候是不是就很像01背包了。

01背包动态规划:

状态表示:从前i个质数中选,且总和为j的集合的数量(数量是状态表示的属性)

状态计算:对于f [i,j],它的转移方案由f [i - 1,j](不选第i个质数)f [i - 1,j - prime[i]](选第i个质数)转移过来,所以f [i,j] = f [i - 1,j] + f[i - 1,j - prime[i]]

#include <iostream>
#include <cstring>

using namespace std;

const int N = 5000;

typedef long long LL;

int prime[N];
int idx = 1;
LL f[N][N];
bool st[N];

void get_primes(int x) //线性筛质数
{
    for(int i = 2; i <= x; i ++)
    {
        if(!st[i])  prime[idx ++] = i;
        for(int j = 1; prime[j] <= x / i; j ++)
        {
            st[prime[j] * i] = true;
            if(i % prime[j] == 0)   break;
        }
    }
}

int main()
{
    get_primes(2019);
    f[0][0] = 1;
    for(int i = 1; i < idx; i ++)
        for(int j = 0; j <= 2019; j ++)
        {
            f[i][j] = f[i - 1][j];
            if(prime[i] <= j)   f[i][j] += f[i - 1][j - prime[i]]; //也可以转换为一维,但在该题中没有必要。
        }
    
    cout << f[idx - 1][2019] << endl;
    return 0;
}

答案:55965365465060 

 D.求值

题目解析:

我们可以从1开始枚举,枚举到第一位满足约数个数为100的数,把该数输出即可。

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    for(int i = 100; i; i ++)
    {
        int cnt = 0;
        int temp = i;
        for(int j = 1; j <= temp / j; j ++)
        {
            if(temp % j == 0)
            {
                if(j == temp / j) //注意特判j == temp / j的情况,这时约数个数只会+1
                    cnt ++;
                else
                    cnt += 2;
            }
        }
        if(cnt == 100)
        {
            cout << i << endl;
            return 0;
        }
    }
}

答案:45360

E.路径计数

 题目解析:

题意:从5X5的方格矩阵中以(1,1)为起点,(1,1)为终点的方案数,每个方案数应该满足题意

考虑到边长为5,我们可以考虑dfs暴力搜索

根据每个条件选择我们要记录的值:

1.总长度不超过12,用step记录我们的步数

2.返回左下角:判断x==1?y==1?

3.路线不自交:用st数组来记录该线段在该次搜索中有没有在之前被走过(注意:要恢复原状,保证下次搜索的正确性)

4.不能越界:加判断条件

#include <iostream>
#include <cstring>

using namespace std;

const int N = 10;

bool st[N][N];
int ans;
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};

void dfs(int x, int y, int step)
{
    if(step <= 12 && step > 2 && st[x][y])
    {
        if(x == 1 && y == 1)
        {
            ans ++;
        }
    }
    if(step > 12)
        return ;
    for(int i = 0; i < 4; i ++)
    {
        int nx = x + dx[i], ny = y + dy[i];
        if(nx < 1 || nx > 6 || ny < 1 || ny > 6)
            continue;
        if(st[nx][ny])
            continue;
        st[nx][ny] = true;
        dfs(nx, ny, step + 1);
        st[nx][ny] = false; //状态恢复的过程
    }
}

int main()
{
    dfs(1, 1, 0);
    cout << ans << endl;
}

答案:206

F.最优包含

 题目解析:

 题意:给定两个字符串S、T,求S中至少修改多少个字符串之后能够通过抽取若干个字符变成T

分析:该题目是经典题目《编辑距离》的简化版

我们可以看成:对于S字符我们有两个操作,删除Si和修改Si,其代价分别为0,1,求让S与T匹配的最小代价

动态规划:

状态表示:f [i,j]:S的前i个字符等于T的前j个字符的最小操作数

考虑所有能转移到f[i,j]的状态,对于f[i,j],只能从删除S的第i个字符、修改S的第i个字符和不做任何操作转移过来

对于删除S的第i个字符转移过来的f [i,j]:f [i , j] = f [i - 1, j] + 0(删除操作的代价为0)

对于修改S的第i个字符转移过来的f [i,j]:f [i ,j] = f [i - 1, j - 1] + 1(修改操作的代价为1)

对于不做任何操作转移过来的f[i,j]: f [i ,j] = f [i - 1,j - 1]

我们可以把修改和不做任何操作归并为一类,代码如下

#include <iostream>
#include <cstring>

using namespace std;

const int N = 1010;

int n, m;
int f[N][N];
char a[N];
char b[N];

int main()
{
    cin >> a + 1 >> b + 1;
    n = strlen(a + 1);
    m = strlen(b + 1);
    memset(f, 0x3f, sizeof f); //状态表示中的属性为最小值,所以我们要初始化为正无穷
    for(int i = 1; i <= n; i ++)    f[i][0] = 0; //表示删除前i - 1个字符从Si开始与之T匹配的代价
    f[0][0] = 0; //未开始匹配的操作数
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
        {
            int temp = 0;
            if(a[i] == b[j])    temp = 0; //temp为0,则为不做任何操作的状态转移过来
            else    temp = 1; //修改操作的代价
            f[i][j] = min(f[i - 1][j], f[i - 1][j - 1] + temp);
        }
    cout << f[n][m] << endl;
    return 0;
}

G.排列数

题目解析:

题意:给定n,k,让我们求元素个数为n,1 - n的全排列中有k - 1个山峰或者山谷(山峰:该数比旁边两数大,山谷:该数比旁边两数小)的个数

分析:

这道题我没有写出来,参考了AcWing 2554. 排列数 $O(n^2k)$ DP (可能更好理解) - AcWing的题解

动态规划:

设f [i,j,k,0/1]表示前i - 1个数已经排好,且最后一个数为j的k单调序列的最后两个数递增或者递减的所有集合

考虑从 f[i - 1][r][k][0 / 1] 进行转移,将 r 分成以下几种情况:

如果 r<jr<j
那么我们将 j 填入该排列后,最后两个数递增。再考虑原排列中最后两个数是否递增。
1. 如果递增,则放入 j 后,折点数不增加,那么有 f[i][j][k][1] += f[i - 1][r][k][1]
2. 如果递减,则放入 j 后,折点数增加,那么有 f[i][j][k][1] += f[i - 1][r][k - 1][0]
如果 r≥jr≥j
那么我们将 j 填入该排列后,最后两个数递减。再考虑原排列中最后两个数是否递增。
1. 如果递增,则放入 j 后,折点数增加,那么有 f[i][j][k][0] += f[i - 1][r][k - 1][1]
2. 如果递减,则放入 j 后,折点数不增加,那么有 f[i][j][k][0] += f[i - 1][r][k][0]

最后再用前缀和数组S维护f[i][r][k][0/1]

#include <cstdio>
#include <cstring>

const int N = 505;
const int mod = 123456;

int n, m;
int f[2][N][N][2];
int s[2][N][N][2];

int main()
{
    scanf("%d%d", &n, &m);

    f[1][1][1][0] = 1;
    f[0][1][1][0] = f[0][2][1][1] = 1;
    s[0][1][1][0] = s[0][2][1][0] = s[0][2][1][1] = 1;
    for (int i = 3; i <= n; i ++ )
    {
        memset(f[i & 1], 0, sizeof f[0]);
        memset(s[i & 1], 0, sizeof s[0]);
        for (int j = 1; j <= i; j ++ )
            for (int k = 1; k <= i && k <= m; k ++ )
            {
                (f[i & 1][j][k][1] += s[i - 1 & 1][j - 1][k][1] + s[i - 1 & 1][j - 1][k - 1][0]) %= mod;
                (f[i & 1][j][k][0] += s[i - 1 & 1][i - 1][k][0] - s[i - 1 & 1][j - 1][k][0]) %= mod;
                (f[i & 1][j][k][0] += s[i - 1 & 1][i - 1][k - 1][1] - s[i - 1 & 1][j - 1][k - 1][1]) %= mod;
                s[i & 1][j][k][0] = (s[i & 1][j - 1][k][0] + f[i & 1][j][k][0]) % mod;
                s[i & 1][j][k][1] = (s[i & 1][j - 1][k][1] + f[i & 1][j][k][1]) % mod;
            }
    }

    printf("%d\n", ((s[n & 1][n][m][0] + s[n & 1][n][m][1]) % mod + mod) % mod);

    return 0;
}

H.解谜游戏

 

题目解析

题意:给定一外圈,中圈,内圈,我们可以顺时针、逆时针同时旋转外、中、内圈,也可以把三圈中位置为 0 的灯管内外方向做一个循环移动,问我们能否使得所有绿色移动到外圈、所有红色移动中圈、所有黄色移动到内圈。

分析:我们可以发现不论如何旋转,我们进行交换的点都会是该圈的下标%4的值相同的点,所以我们可以判断对于这些下标组成的点,绿==3?红==2?黄==1?若满足,我们可以在有限次旋转和交换操作中使得绿色全部移动到外圈,红色全部移动到中圈,黄色移动到内圈

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int t;
string a, b, c;

int cnt[4][3];

void add(string a)
{
    for(int i = 0; i < a.size(); i ++)
    {
        if(a[i] == 'G')
            cnt[i % 4][0] ++;
        else if(a[i] == 'R')
            cnt[i % 4][1] ++;
        else
            cnt[i % 4][2] ++;
    }
}

int main()
{
    cin >> t;
    while(t --)
    {
        cin >> a >> b >> c;
        bool is_total = true;
        memset(cnt, 0, sizeof cnt);
        add(a), add(b), add(c);
        for(int i = 0; i < 4; i ++)
        {
            //绿色移动到外圈、所有红色移动中圈、所有黄色移动到内圈
            if(cnt[i][0] != 3 || cnt[i][1] != 2 || cnt[i][2] != 1)
            {
                is_total = false;
                break;
            }
        }
        if(is_total)    cout << "YES" << endl;
        else    cout << "NO" << endl;
    }
    return 0;
}

I.第八大奇迹

 题目解析:

 (最近正好在学习线段树,正好可以用这题练手)

分析:

对于这种单点修改,区间查询的题目很容易联想到树状数组和线段树,我们这里很容易就可以发现树状数组很难去维护我们的查询操作。

所以我们用线段树来解决这一题

对于线段树,我们要考虑需要维护什么值才能保证答案的正确性。

l,r是肯定的,我们这里还需要维护一个长度为8的数组,来存储该区间的第八大的数

而且对于该题可以发现我们不需要用懒标记去把父节点的值去更新子节点的值,只需要pushup操作把子节点的值去更新父节点。

代码如下

#include <iostream>
#include <cstring>
#include <vector>

using namespace std;

const int N = 100010;

struct Node
{
    int l, r;
    int v[8];
}tr[4 * N];

int n, m;

void build(int u, int l, int r)
{
    if(l == r)  tr[u] = {l, r};
    else
    {
        tr[u] = {l, r};
        int mid = l + r >> 1;
        build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);
    }
}

void pushup(Node &t, Node &l, Node &r)
{
    int i = 0, j = 0, k = 0;
    while(i < 8 && j < 8 && k < 8)
    {
        if(l.v[i] < r.v[j]) t.v[k ++] = r.v[j ++];
        else    t.v[k ++] = l.v[i ++];
    }
    if(k < 8 && j < 8)  t.v[k ++] = r.v[j ++];
    if(k < 8 && i < 8)  t.v[k ++] = l.v[i ++];
}

void modify(int u, int x, int c)
{
    if(tr[u].l == x && tr[u].r == x)    tr[u].v[0] = c;
    else
    {
        int mid = tr[u].l + tr[u].r >> 1;
        if(mid >= x)    modify(u << 1, x, c);
        else    modify(u << 1 | 1, x, c);
        pushup(tr[u], tr[u << 1], tr[u << 1 | 1]); 
    }
}

Node query(int u, int l, int r)
{
    if(tr[u].l >= l && tr[u].r <= r)    return tr[u];
    int mid = tr[u].l + tr[u].r >> 1;
    if(mid >= r)    return query(u << 1, l, r);
    else if(mid < l)   return query(u << 1 | 1, l, r); 
    else
    {
        Node ans;
        auto left = query(u << 1, l, r);
        auto right = query(u << 1 | 1, l, r);
        pushup(ans, left, right);
        return ans;
    }
}

int main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> n >> m;
    build(1, 1, n);
    while(m --)
    {
        char op[2];
        int l, r;
        cin >> op >> l >> r;
        if(*op == 'C')
        {
            modify(1, l, r);
        }
        else
        {
            cout << query(1, l, r).v[7] << endl;
        }
    }
    return 0;

}

最后分享一下分析时打的草稿:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2019年第十届蓝桥杯程序设计大赛国赛C++大学B组题解 的相关文章

  • 为什么使用abs()或fabs()而不是条件否定?

    在 C C 中 为什么要使用abs or fabs 不使用以下代码即可查找变量的绝对值 int absoluteValue value lt 0 value value 这与较低级别的指令较少有关吗 您提出的 有条件的abs 并不等于std
  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • std::bind 重载解析

    下面的代码工作正常 include
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • QT从入门到实战x篇_14_消息对话框(QMessageBox、静态成员函数的访问、修改按键、利用函数返回值为枚举判断按键类型,实现指定动作)

    接上篇 QT从入门到实战x篇 xx 模态和非模态对话框创建 对话框建立在栈上运行完即释放 堆上不删除不可释放 对象在栈上及堆上的生命周期问题需弄懂 在帮助文档中 搜索QMessageBox 会看到其比较重要的几个函数如下 对应的为静态成员函
  • npm start 作用

    在配置phonecat项目时需要运行npm start在本地配置一个服务器环境 npm start首先会安装一系列的必要程序 这些程序依赖package json中的内容 package json中的内容详解如下 依赖包介绍 在克隆项目之后
  • 【Android开发】toast提示

    什么是Toast 在屏幕下方浮现出一个窗口 显示一段时间后又消失 这个可视化组件叫做 Toast 它主要用于提示用户某种事件发生了 如何在添加Toast 最关键的是在事件处理逻辑中加两条语句 定义一个Toast 用makeText 设置要浮
  • 饥荒暴食模式服务器无响应,饥荒暴食模式无银盘图文攻略介绍

    饥荒暴食模式无银盘图文攻略介绍 2018 06 26 17 03 50来源 游戏下载编辑 苦力趴评论 0 饥荒 近日推出了新的游戏模式暴食模式 玩家可以选择单人通关亦或是组队一同任务 下面就为大家带来饥荒暴食模式无银盘图文攻略介绍 基本思路
  • 数据库之数据库设计和E-R模型

    本篇文章介绍数据库设计和E R模型 内容基本是笔者在学习 数据库系统概念 时摘抄总结而来 仅作笔记 实体 联系模型 实体 联系 entity relationship E R 数据模型的提出旨在方便数据库的设计 它是通过允许定义代表数据库全
  • related work

    Traditional approaches e g genetic algorithm GA 2 and ant colony optimization ACO 3 can obtain optimal mapping results b
  • mysql查询练习(三)

    31 查询成绩比该课程平均成绩低的同学的成绩表 mysql gt select from score a where degree lt select avg degree from score b where a cno b cno sn
  • 查看linux系统版本命令

    一 查看内核版本命令 1 root SOR SYS cat proc version Linux version 2 6 18 238 el5 mockbuild x86 012 build bos redhat com gcc versi
  • Robot Framework完整流程学习--分层思想

    一 环境搭建 网上有很多的教程 这里就不多讲了 二 RIDE的界面认识 这里只介绍几个重要常用的功能 其他相信自己都能理解 1 Search Keywords F5 搜索关键字 2 Content Assistance 内容助手 3 Vie
  • java 多线程 总结一

    首先讲一下进程和线程的区别 进程 每个进程都有独立的代码和数据空间 进程上下文 进程间的切换会有较大的开销 一个进程包含1 n个线程 线程 同一类线程共享代码和数据空间 每个线程有独立的运行栈和程序计数器 PC 线程切换开销小 线程和进程一
  • nmap常规使用和参数超细详解 -- 小黑liux武器库详解<宝藏文>

    namp非常强大的主机发现和端口扫描工具 这是web渗透常用的工具 包含四项基本功能 主机发现 端口扫描 版本侦测 操作系统侦测 目录 常规使用 单体拳法 组合拳 参数详解 主机发现 扫描技术 服务版本探测 操作系统检测 防火墙 IDS规避
  • opencv +数字识别

    现在很多场景需要使用的数字识别 比如银行卡识别 以及车牌识别等 在AI领域有很多图像识别算法 大多是居于opencv 或者谷歌开源的tesseract 识别 由于公司业务需要 需要开发一个客户端程序 同时需要在xp这种老古董的机子上运行 故
  • protoBuffer的下载以及使用①

    这里写了一个简单的示例检测proto是否可以使用 使用protoBuf需要提供以下 protobuf java 2 6 1 sources jar protoc 2 6 1 win32 zip 这两个文件我已经添加了附件 当然也可去谷歌官网
  • mysql报错合集

    1 Too many connections 报错 quickBI上报错 数据源执行SQL失败 INTERNAL java sql SQLException com mysql jdbc exceptions jdbc4 MySQLNonT
  • java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigD

    解决 将int类型转成BigDecimal类型就可以了 filtrationList add new Filtration MatchType EQ BigDecimal valueOf 0 fisRemove java lang Clas
  • 东北大学acm第五周周赛

    include
  • Resources.getResourceAsStream用法

    Resources com ibatis common resource Resources 类为从类路径中加载资源 提供了易于使用的方法 处理 ClassLoader 是一项 富于挑战的工作 尤其是应用服务器 容器的情况下 Resourc
  • mmdetection的VOC数据集训练、测试、保存(测试图片)

    mmdetection训练 测试总结 1 数据集格式 voc数据集 在 mmdetection data VOCdekit 上传数据 改名为VOC2007 其中包含JPEGImages Annotations ImageSets等 2 代码
  • 【vue3】监听路由的写法以及路由更新但是页面内容不更新的解决方案

    以下是vue3使用watch监听路由的写法 watch gt router currentRoute value newValue any gt 此处写监听路由后要执行的事情 if newValue fullPath manage rack
  • 2019年第十届蓝桥杯程序设计大赛国赛C++大学B组题解

    目录 A 平方序列 B 质数拆分 D 求值 E 路径计数 F 最优包含 G 排列数 H 解谜游戏 I 第八大奇迹 A 平方序列 题目解析 题意很直白 我们可以暴力枚举x y 2019