第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)

目录

一.密密摆放

1.题目讲解

2.代码实现

二.脉冲强度之和

1.题目讲解

2.代码实现

[三.25 之和](#三.25 之和)

1.题目讲解

2.代码实现

四.旗帜

1.题目讲解

2.代码实现

五.数列差分

1.题目讲解

2.代码实现

六.树上寻宝

1.题目讲解

2.代码实现

七.翻转硬币

1.题目讲解

2.代码实现

八.破解信息

1.题目讲解

2.代码实现


一.密密摆放

题目链接:https://www.lanqiao.cn/problems/20565/learning/

1.题目讲解

2.代码实现

cpp 复制代码
#include <iostream>

using namespace std;

int main()
{
    cout << 25 * 8 << endl;
    return 0;
}

二.脉冲强度之和

题目链接:https://www.lanqiao.cn/problems/20555/learning/

1.题目讲解

2.代码实现

cpp 复制代码
#include <iostream>

using namespace std;

bool check(int sum)
{
    int x = sum % 10;
    while(sum)
    {
        if(x != sum % 10)
        {
            return false;
        }
        sum /= 10;
    }
    return true;
}

int main()
{
    long long ret = 0;
    for(int k = 1;k <= 2025515;k++)
    {
        int sum = k * 10 + 45;
        if(check(sum))
        {
            ret+=sum;
        }
    }
    cout << ret << endl;
    return 0;
}

三.25 之和

题目链接:https://www.lanqiao.cn/problems/20548/learning/

1.题目讲解

2.代码实现

cpp 复制代码
#include <iostream>

using namespace std;


int main()
{
    int n;
    cin >> n;
    long long sum = (n + n + 24) * 25 / 2;
    cout << sum << endl;
    return 0;
}

四.旗帜

题目链接:https://www.lanqiao.cn/problems/20543/learning/

1.题目讲解

直接把我们的cnt表打好,然后一直加就好了

2.代码实现

cpp 复制代码
#include <iostream>

using namespace std;

int h,w;
int cnt[7];
string s = "LANQIAO";

int main()
{
    cin >> h >> w;
    string aim = s;
    while(aim.size() < w)
    {
        aim += s;
    }
    aim+=s;
    for(int i = 0;i < 7;i++)
    {
        int sum = 0;
        for(int j = i;j < w + i;j++)
        {
            if(aim[j] == 'A')
            {
                sum++;
            }
        }
        cnt[i] = sum;
    }
    int ret = 0;
    for(int i = 0;i < h;i++)
    {
       ret += cnt[i % 7];
    }
    cout << ret << endl;
    return 0;
}

五.数列差分

题目链接:https://www.lanqiao.cn/problems/20530/learning/

1.题目讲解

2.代码实现

cpp 复制代码
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1e5 + 10;
int a[N];
int b[N];
int n;

int main()
{
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        cin >> a[i];
    }
    for(int i = 1;i <= n;i++)
    {
        cin >> b[i];
    }
    sort(a + 1,a + 1 + n);
    sort(b + 1,b + 1 + n);
    int cnt = 0;
    int aend = n,bend = n,abegin = 1,bbegin = 1;
    while(aend >= abegin && bend >= bbegin)
    {
        if(a[aend] <= b[bend])
        {
            cnt++;
            bend--;
            abegin++;
        }
        else
        {
            aend--;
            bend--;
        }
    }
    cout << cnt << endl;
    return 0;
}

六.树上寻宝

题目链接:https://www.lanqiao.cn/problems/20523/learning/

1.题目讲解

2.代码实现

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

#define int long long
const int N = 1e5 + 10;
vector<int> edges[N];
int n,k;
int w[N];
int ret;

void dfs(int x,int step,int fa)
{
    if(step == -1)
    {
        return;
    }
    ret += w[x];
    for(auto& e : edges[x])
    {
      if(e == fa)
      {
        continue;
      }
      dfs(e,step - 1,x);
    }
}

signed main()
{
    cin >> n >> k;
    for(int i = 1;i <= n;i++)
    {
        cin >> w[i];
    }
    for(int i = 1;i <= n - 1;i++)
    {
        int u,v;
        cin >> u >> v;
        edges[u].push_back(v);
        edges[v].push_back(u);
    }
    dfs(1,2 * k,0);
    cout << ret << endl;
    return 0;
}

七.翻转硬币

题目链接:https://www.lanqiao.cn/problems/20520/learning/

1.题目讲解

2.代码实现

cpp 复制代码
#include <iostream>

using namespace std;

const int N = 1010,M = 3;
int n,m;
char a[M][N][N];//a[0]: 不反转的状态  a[1]: 反转的状态
int f[N][M][M];

int calc(char a[],char b[],char c[])
{
    int sum = 0;
    for(int j = 1;j <= m;j++)
    {
        int cnt = 0;
        if(b[j] == b[j - 1])
        {
            cnt++;
        }
        if(b[j] == b[j + 1])
        {
            cnt++;
        }
        if(b[j] == a[j])
        {
            cnt++;
        }
        if(b[j] == c[j])
        {
            cnt++;
        }
        sum += cnt * cnt;
    }
    return sum;
}

int main()
{
    cin >> n >> m;
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= m;j++)
        {
            cin >> a[0][i][j];
            if(a[0][i][j] == '0')
            {
                a[1][i][j] = '1';
            }
            else
            {
                a[1][i][j] = '0';
            }
        }
    }
    for(int i = 1;i <= n;i++)
    {
        for(int now = 0;now <= 2;now++)
        {
            for(int down = 0;down <= 2;down++)
            {
                int x = f[i - 1][0][now] + calc(a[0][i - 1],a[now][i],a[down][i + 1]);
                int y = f[i - 1][1][now] + calc(a[1][i - 1],a[now][i],a[down][i + 1]);
                f[i][now][down] = max(x,y);
            }
        }
    }
    cout << max(f[n][0][0],f[n][1][0]) << endl;
    return 0;
}

八.破解信息

题目链接:https://www.lanqiao.cn/problems/20508/learning/

1.题目讲解

2.代码实现

cpp 复制代码
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1e5 + 10,M = 30;
string s;
int cnt[M];

int main()
{
    cin >> s;
    for(int i = 0;i < s.size();i++)
    {
        cnt[s[i] - 'a']++;
    }
    for(int i = 26;i >= 0;i--)
    {
        if(cnt[i])
        {
            for(int j = 0;j < cnt[i];j++)
            {
                cout << char(i + 'a');
            }
            return 0;
        }
    }

    return 0;
}
相关推荐
BirdenT3 分钟前
20260519紫题训练
c++·算法
Highcharts.js5 小时前
倒置百分比堆叠面积图表示列详解|Highcharts大气成分图表代码
开发语言·信息可视化·highcharts·图表开发·面积图·图表示例·推叠图
csdn_aspnet5 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
晨曦中的暮雨5 小时前
4.15腾讯 CSIG云服务产线 一面
java·开发语言
存在morning5 小时前
【GO语言开发实践】二 GO 并发快速上手
大数据·开发语言·golang
谙弆悕博士6 小时前
【附C源码】从零实现C语言堆数据结构:原理、实现与应用
c语言·数据结构·算法··数据结构与算法
xiaoerbuyu12337 小时前
开源Java 邮箱 基于SpringBoot+Vue前后端分离的电子邮件
java·开发语言
C+++Python7 小时前
C++ 进阶学习完整指南
java·c++·学习
sparEE8 小时前
c++值类别、右值引用和移动语义
开发语言·c++
zhangjw348 小时前
第11篇:Java Map集合详解,HashMap底层原理、哈希冲突、JDK1.8优化、遍历方式彻底吃透
java·开发语言·哈希算法