蓝桥杯 Day 3(C++)

Dream-Y.ocean 先躺在说
C/C++领域潜力新星
2023-03-06 19:56:47

门牌制作

#include <iostream>

using namespace std;

int main()
{
    int ans = 0;

    for(int i = 1; i <= 2020; i++)
    {
        int tmp = i;

        while(tmp)
        {
            int x = tmp % 10;
            if(x == 2)
            {
                ans ++;
            }
            tmp /= 10;
        }
    }

    cout << ans << endl;

    return 0;
}

img

货物摆放


#include <iostream>
#include <vector>

using namespace std;

long long n = 2021041820210418;

//本质:找一个数的所有约数

int main()
{
    // vector<long long> v;

    // for(int i = 1; i <= n / i; i++)
    // {
    //     if(n % i == 0)
    //     {
    //         v.push_back(i);

    //         //顺便将另外一个约数也给输入进来
    //         if(n / i != i)
    //         {
    //             v.push_back(n / i);
    //         }
    //     }
    // }

    // long long ans = 0;

    // for(int i = 0; i < v.size(); i++)
    // {
    //     for(int j = 0; j < v.size(); j++)
    //     {
    //         for(int k = 0; k < v.size(); k++)
    //         {
    //             if(v[i] * v[j] * v[k] == n) ans ++;
    //         }
    //     }
    // }

    // cout << ans << endl;

  cout << 2430 << endl;

    return 0;
}

img

跳跃

// 敬请期待

重新排序

#include <iostream>
#include <algorithm>

using namespace std;

int n,m;

const int N = 1e5 + 10;

long long a[N], sum[N];

long long b[N];

//贪心:
//统计 每个下标出现在区间查询中的 次数
//然后 与 原数组进行比对,将区间查询中出现最多次数的 与 数组中数字大的相匹配
//从而 获取到最大的数字

//而当去计算 答案最大和时,有一个很巧妙的公式:其实就是把所有询问的区间内出现过的 【数字 * 出现次数】 相加

//【统计 区间查询中数字出现的次数 -- 可以用 差分统计】
//因为此时 相当于 查询一次,就在这 查询区间上的位置 都 +1,表示 出现了一次

int main()
{
    cin >> n;

    for(int i = 1; i <= n; i++)
    {
        cin >> b[i];
    }

    cin >> m;

    while(m --)
    {
        int l, r;

        cin >> l >> r;

        a[l] ++;
        a[r + 1] --;
    }

    //对应原数组的每个数字的查询次数
    for(int i = 1; i <= n; i++)
    {
        sum[i] = sum[i - 1] + a[i]; 
    }

    long long sum1 = 0, sum2 = 0;

    for(int i = 1; i <= n; i++)
    {
        sum1 += b[i] * sum[i];
    }

    sort(sum + 1, sum + 1 + n);
    sort(b + 1, b + 1 + n);

    for(int i = 1; i <= n; i++)
    {
        sum2 += b[i] * sum[i];
    }

    cout << sum2 - sum1 << endl;

    return 0;
}

img

...全文
15 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,799

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧