第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;
}
相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛2 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
m0_547486662 天前
《数据结构教程》全套 PPT课件2026
数据结构
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark2 天前
大规模并行计算中的负载均衡算法研究4
算法