AcWing 第 60 场周赛 (RANK51)

简介: AcWing 第 60 场周赛 (RANK51)

@[TOC]

比赛链接: 第 60 场周赛

二十分钟下班,有进步。

在这里插入图片描述

B.AcWing 4495. 数组操作

题目

给定一个长度为 n 的正整数数组 a1,a2,…,an。

请你对该数组进行 k 次操作,每次操作具体如下:

  • 如果数组中存在非零元素,则找到其中的最小非零元素 x,将其输出,并让数组中的所有非零元素都减去 x。
  • 如果数组中不存在非零元素,则输出 0 即可。

思路: 模拟

因为每次操作都是先找到数组中的最小元素,并且让数组中每个元素都减去x,那么可以先将数组从小到大排序,此时数组呈非单调递减,全部都减去一个数后,也不影响数组的顺序,还是非单调递减。

那么我们就可以枚举每个元素,从前到后依次操作,最多进行k次。如果当前元素已经等于0的话那么就不能在操作了,找下一个大于0的数,如果直到最后还找不到k个的话,那么就都输出0即可

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef priority_queue<int, vector<int>, less<int>> Q;
#define x first
#define y second
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
const int N = 1e6 + 10;
ll a[N];
signed main()
{
    // freopen("in.in", "r", stdin);
    // freopen("out.out", "w", stdout);
    int n, k;
    cin >> n >> k;
    // 记录当前总共减去了多少
    ll ans = 0;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++)
    {
        // 如果当前已经被减完的话,就跳过当前这个数,因为每个数都要找大于0的
        a[i] = max(0ll, a[i] - ans);
        // 如果当前元素大于0,并且还需要操作的话就继续操作
        if (a[i] > 0 && k > 0)
        {
            // 操作次数减1
            k--;
            cout << a[i] << endl;
        }
        // 减去元素加上
        ans += a[i];
    }
    while (k--)
    {
        puts("0");
    }
    return 0;
}

C.AcWing 4496. 吃水果

题目

n 个小朋友站成一排,等着吃水果。

一共有 m 种水果,每种水果的数量都足够多。

现在,要给每个小朋友都发一个水果,要求:在所有小朋友都拿到水果后,恰好有 k 个小朋友拿到的水果和其左边相邻小朋友拿到的水果不同(最左边的小朋友当然不算数,即最左边的小朋友不包含在 k 个小朋友内)。

请你计算,一共有多少种不同的分发水果的方案。

思路: 状态机模型

根据闫氏dp法分析,总共有三个参数

状态表示f[i][j][k] 表是前i个小朋友,其中有j个小朋友被选中的总方案数,k==0时,表示第i个小朋友没被选中,k==1表示第i个小朋友被选中

状态计算

  • 当第i个小朋友没被选上时:f[i][j][0] = f[i-1][j][1] + f[i-1][j][0],如果当前小朋友没被选上,那么他一定要和前一个小朋友拿的水果一样,所以就等于前一个的方案数
  • 当第i个小朋友被选上时:f[i][j][1] = (f[i-1][j-1][0] + f[i-1][j-1][1]) * (m-1) ,因为选中的要和前一个不一样,所以方案数要乘上m-1

代码1

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef priority_queue<int, vector<int>, less<int>> Q;
#define x first
#define y second
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
const int N = 2010, mod = 998244353;
ll f[N][N][2];
ll n, m, k;
signed main()
{
    // freopen("in.in", "r", stdin);
    // freopen("out.out", "w", stdout);
    
    cin >> n >> m >> k;
    // 初始化,第一位置不能选,所以有m种水果可以选
    f[1][0][0]=m;
    for (int i = 2; i <= n; i++)
    {
        f[i][0][0] = f[i - 1][0][0]  % mod;
        for (int j = k; j >= 1; j--)
        {
            f[i][j][0] = f[i - 1][j][1]  % mod + f[i - 1][j][0]  % mod;
            f[i][j][1] = f[i - 1][j - 1][1] * (m - 1) % mod + f[i - 1][j - 1][0] * (m-1) % mod;
        }
    }
    ll ans = (f[n][k][1] + f[n][k][0]) % mod;
    cout << ans;
    return 0;
}

我们还可以优化,可以不用表示状态那一维。

01背包

状态表示f[i][j] 表是前i个小朋友,其中有j个小朋友被选中的总方案数

状态计算

  • 当第i个小朋友没被选上时:f[i][j] += f[i-1][j],如果当前小朋友没被选上,那么他一定要和前一个小朋友拿的水果一样,所以就等于前一个的方案数
  • 当第i个小朋友被选上时:f[i][j] += f[i-1][j-1] * (m-1) ,因为选中的要和前一个不一样,所以方案数要乘上m-1

代码2

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef priority_queue<int, vector<int>, less<int>> Q;
#define x first
#define y second
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
const int N = 2010, mod = 998244353;
ll f[N][N];
ll n, m, k;
signed main()
{
    // freopen("in.in", "r", stdin);
    // freopen("out.out", "w", stdout);

    cin >> n >> m >> k;
    f[1][0] = m;
    for (int i = 2; i <= n; i++)
    {
        f[i][0] = f[i - 1][0] % mod;
        for (int j = k; j >= 1; j--)
        {
            f[i][j] = (f[i - 1][j] + f[i - 1][j - 1] * (m - 1)) % mod;
        }
    }
    ll ans = f[n][k];
    cout << ans;
    return 0;
}
相关文章
|
传感器 算法 Ubuntu
大疆M2006电机测试文档
本文是关于大疆RoboMaster M2006电机的测试文档,介绍了在Ubuntu20.04环境下通过ROS读取电机反馈信息、控制电机移动,并利用PID控制算法实现速度闭环的测试流程,涵盖了测试材料、接线方法、电机校准、CAN通讯测试以及在ROS中的移植和PID调节的详细步骤和方法。
1938 0
大疆M2006电机测试文档
|
缓存 NoSQL 算法
LRU算法与Caffeine、Redis中的缓存淘汰策略详解与比较
在实际应用中,我们需要考虑数据访问模式、内存限制以及性能需求等因素来选择最合适的缓存淘汰策略。通过深入了解LRU算法及其在不同缓存库中的应用,我们可以更好地优化我们的应用程序的性能。
1159 1
|
3天前
|
人工智能 JSON 安全
|
3天前
|
云安全 人工智能 安全
|
3天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
684 0
|
3天前
|
人工智能 自然语言处理 数据挖掘
最新版通义千问(Qwen3.8-Max-Preview)功能介绍
2026年,通义千问正式推出全新旗舰级大模型 **Qwen3.8-Max-Preview 预览版**,作为首款突破万亿参数规格的新一代基座模型,该模型总参数量达到**2.4万亿**,采用全新迭代的MoE混合专家架构,综合推理性能、长文本处理、多模态理解、复杂任务规划能力全面超越前代Qwen3.7-Max版本,整体实力跻身全球第一梯队,可对标海外顶级旗舰模型,是当前面向复杂工程开发、多智能体协同、超长文档解析、专业办公自动化场景的最优国产基座模型。
715 0
|
5天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
648 25
|
3天前
|
人工智能 测试技术 语音技术
Qwen-Audio-3.0-TTS 正式发布!AI 语音从 “能说话” 升级到 “会带情绪表达”
阿里云发布Qwen-Audio-3.0-TTS语音合成大模型,支持细粒度标签控制(如[gasp][angry])、freestyle自由风格、16种语言及20种方言,声学鲁棒性强。含Flash(首包延时300ms)和Plus(全球榜单冠军)双版本,已在百炼平台开放调用。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
585 1

热门文章

最新文章