蓝桥杯 Day 3(C++)

Dream-Y.ocean Dream-Y.ocean 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

门牌制作

#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

...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部
Dream-Y.ocean
Dream-Y.ocean 新星创作者: C/C++技术领域 新星创作者: C/C++技术领域
高校算法学习社区 51,730 成员 6,062 内容