第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;
}
相关推荐
fengfuyao9852 小时前
VC++基于服务器的点对点文件传输实例
服务器·开发语言·c++
汀、人工智能2 小时前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
咬_咬2 小时前
go语言学习(基本数据类型)
开发语言·学习·golang·数据类型
Y001112362 小时前
MySQL-进阶
开发语言·数据库·sql·mysql
Crazy________2 小时前
docker4.8
java·开发语言·eureka
山甫aa2 小时前
List 容器 -----C++的stl学习
开发语言·c++·学习
汀、人工智能2 小时前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
cch89182 小时前
Laravel 2.x:早期框架的奠基之路
java·开发语言
t198751282 小时前
光伏发电MPPT(最大功率点跟踪)MATLAB仿真程序
开发语言·matlab