【Acwing 周赛复盘】第86场周赛复盘(2023.1.14)

news2024/12/25 23:42:31

【Acwing 周赛复盘】第86场周赛复盘

周赛复盘 ✍️

本周个人排名:678/2358

AC情况:2/3

这是博主参加的第一次周赛,深刻体会到了世界的参差 😂

看到排名 TOP3 的大佬都是不到 5 分钟内就 AK 了,真是恐怖如斯(ORZ)

对比下来,自己做满 75 分钟并且只 AC 了 2 题真是弱爆了。。。

希望未来也能继续努力,紧跟大佬们的步伐,继续加油 💪



周赛信息 📚

时间:2023年1月14日19:00-20:15

竞赛链接:https://www.acwing.com/activity/content/2794/

y总直播间:http://live.bilibili.com/21871779

y总录播讲解视频:【AcWing杯 - 第86场周赛讲解】


题目列表 🧑🏻‍💻

题目名称原题链接难度
4794. 健身原题链接简单 🟢
4795. 安全区域原题链接中等 🟡
4796. 删除序列原题链接困难 🔴

题解 🚀

【题目A】健身

【题目描述】

李华一共要进行 n n n 组健身训练。

其中,第 i i i 组训练的时长 a i a_i ai

李华只做三种运动:胸部(chest)运动、二头肌(biceps)运动、背部(back)运动。

而且,三种运动是循环训练的,也就是说他第一组训练是胸部运动,第二组训练是二头肌运动,第三组训练是背部运动,第四组训练是胸部运动,第五组训练是二头肌运动…以此类推直到做完第 n n n 组训练。

请你计算,他做哪种运动的 时长 最长。

【输入】

第一行包含整数 n n n

第二行包含 n n n 个整数 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an

【输出】

共一行,如果训练时长最长的运动为:

  • 胸部运动,则输出 chest
  • 二头肌运动,则输出 biceps
  • 背部运动,则输出 back

数据保证训练时长最长的运动是唯一的。

【数据范围】

3 3 3 个测试点满足 1 ≤ n ≤ 7 1 \le n \le 7 1n7
所有测试点满足 1 ≤ n ≤ 20 1 \le n \le 20 1n20 1 ≤ a i ≤ 25 1 \le a_i \le 25 1ai25

【输入样例1】

2
2 8

【输出样例1】

biceps

【输入样例2】

3
5 1 10

【输出样例2】

back

【输入样例3】

7
3 3 2 7 9 6 8

【输出样例3】

chest

【原题链接】

https://www.acwing.com/problem/content/4797/


【题目分析】

签到题,简单模拟即可。(但是现场编写的代码有很多可以改进和优化的地方,见下面「代码对比总结」部分)

【复盘后的优化代码】✅

#include<bits/stdc++.h>

using namespace std;

int s[3];

int main() {
    ios::sync_with_stdio(false);  //cin读入优化
    cin.tie(0);

    int n;
    cin >> n;

    int x;
    for (int i = 1; i <= n; ++i) {
        cin >> x;
        // 下面的写法避免了多个if
        s[i % 3] += x;  // s[1]存储chest、s[2]存储biceps、s[0]存储back
    }

    // 找到最大值下标
    int k = 0;
    for (int i = 1; i <= 2; ++i) {
        if (s[i] > s[k])
            k = i;
    }
  
    // 输出结果
    if (k == 1) cout << "chest" << endl;
    else if (k == 2) cout << "biceps" << endl;
    else cout << "back" << endl;
    
    return 0;
}

【周赛现场 AC 代码】

#include<bits/stdc++.h>

using namespace std;

int n, tmp;
int chest,biceps,back;

int main() {
    ios::sync_with_stdio(false);  //cin读入优化
    cin.tie(0);

    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> tmp;
        if (i % 3 == 1) {
            chest += tmp;
        } else if (i % 3 == 2) {
            biceps += tmp;
        } else {
            back += tmp;
        }
    }
//    cout << chest << " " << biceps << " " << back << endl;

    if (chest > biceps) {
        if (chest > back) {
            cout << "chest" << endl;
        } else {
            cout << "back" << endl;
        }
    } else {
        if (biceps > back) {
            cout << "biceps" << endl;
        } else {
            cout << "back" << endl;
        }
    }

    return 0;
}

【代码总结分析】

  • s[i%3] += x 的思路值得借鉴,省去了多个 if 判断
  • 寻找最大值下标的方式值得借鉴,优化了直接比较的多 if 判断


【题目B】安全区域

【题目描述】

给定一个 n × n n×n n×n 的方格棋盘和 m m m 个国际象棋中的车。

对于一个方格,如果该方格满足以下两个条件中的至少一个,则该方格会被车攻击到:

  • 该方格内有车。
  • 至少有一个车与该方格位于同一行或同一列。

现在,我们要将 m m m 个车逐个放入到棋盘中,其中第 i i i 个车放到棋盘的第 x i x_i xi 行第 y i y_i yi 列的方格中。

车的编号从 1 1 1 m m m,行/列的编号从 1 1 1 n n n

保证任意两个车不会放到同一个方格中。

对于 1 ≤ i ≤ m 1 \le i \le m 1im,请你计算,将前 i i i 个车放入到棋盘中后,有多少个方格不会被车攻击到。

【输入】

第一行包含两个整数 n , m n,m n,m

接下来 m m m 行,其中第 i i i 行包含两个整数 x i , y i x_i,y_i xi,yi,表示第 i i i 个车放到棋盘的第 x i x_i xi 行第 y i y_i yi 列的方格中。

【输出】

共 1 行,其中第 i i i 行输出将前 i i i 个车放入到棋盘中后,不会被车攻击到的方格数量。

【数据范围】

前 33 个测试点满足 1 ≤ m ≤ 3 1 \le m \le 3 1m3
所有测试点满足 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105 1 ≤ m ≤ m i n ( 1 0 5 , n 2 ) 1 \le m \le min(10^5,n^2) 1mmin(105,n2) 1 ≤ x i , y i ≤ n 1 \le x_i,y_i \le n 1xi,yin

【输入样例1】

3 3
1 1
3 1
2 2

【输出样例1】

4 2 0

【输入样例2】

5 2
1 5
5 1

【输出样例2】

16 9

【输入样例3】

100000 1
300 400

【输出样例3】

9999800001

【原题链接】

https://www.acwing.com/problem/content/4798/


【题目分析】

思维题,需要通过 数学推导 的方式,得到未被攻击的方格数数量为: ( n − c ) ∗ ( n − r ) (n-c)*(n-r) (nc)(nr),其中 c , r c,r c,r 为被攻击的列数、行数

🍉 PS:本题数据范围较大,需要使用 long long 类型,不然会报错。(在公式前强制转换即可:(ll)(n-c)*(n-r)

【复盘后的优化代码】✅

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
const int N = 1e5 + 10;
int n, m, x, y;
int a[N], b[N];

int main() {
    ios::sync_with_stdio(false);  //cin读入优化
    cin.tie(0);

    cin >> n >> m;
    int row = 0, col = 0;
    for (int i = 1; i <= m; ++i) {
        cin >> x >> y;
      
      	// 统计当前被攻击的行数、列数
        if (!a[x]) a[x] = 1, row++;
        if (!b[y]) b[y] = 1, col++;

        // 求剩余个数的公式,该形式容易推导和记忆
        cout << (ll) (n - row) * (n - col) << " ";
    }

    return 0;
}

【周赛现场 AC 代码】

#include<bits/stdc++.h>

typedef long long ll;
using namespace std;

const int N = 1e5 + 10;
int a[N], b[N];
int n, m, x, y;
ll ans[N];

int main() {
    ios::sync_with_stdio(false);  //cin读入优化
    cin.tie(0);

    cin >> n >> m;
    ll sum = (ll) n * n;

    int row = 0, col = 0;
    for (int i = 1; i <= m; ++i) {
        cin >> x >> y;
        if (!a[x]) a[x] = 1, row++;
        if (!b[y]) b[y] = 1, col++;
        cout << (ll) sum - (ll) row * n - (ll) col * (n - row) << " ";
    }

    return 0;
}

【代码对比总结】

  • 推导的公式,可以写成 ( n − c ) ∗ ( n − r ) (n-c)*(n-r) (nc)(nr) 这样更加 简洁且容易记忆 的形式。
  • 在使用 (ll)强制转换 时,需要注意 哪些项会爆 int。(本次周赛敲代码时,由于没有考虑该问题,以为在最前面加上 (ll) 就能整体转换,导致 (ll) sum - row * n - col * (n - row) 这样 爆int 的错误没能被及时发现,极大的影响了 AC 时间和心态)


【题目C】删除序列

【题目描述】

给定一个长度为 n n n 的正整数序列 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an

你可以进行任意次删除操作。

每次删除操作分为两步:

  1. 选择序列中的一个元素(不妨设其元素值为 x x x),并将这 **一个 **元素删除,这可以给你加 x x x 分。
  2. 所有元素值 x − 1 x−1 x1 x + 1 x+1 x+1 的元素(如果有的话)从序列中删除,这不会给你带来任何分数。

请计算,通过删除操作,你可以获得的最大得分。

【输入】

第一行包含整数 n n n

第二行包含 n n n 个正整数 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an

【输出】

一个整数,表示可以获得的最大得分。

【数据范围】

6 6 6 个测试点满足 1 ≤ n ≤ 10 1 \le n \le 10 1n10

所有测试点满足 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105 1 ≤ a i ≤ 1 0 5 1 \le a_i \le 10^5 1ai105

【输入样例1】

2
1 2

【输出样例1】

2

【输入样例2】

3
1 2 3

【输出样例2】

4

【输入样例3】

9
1 2 1 3 2 2 2 2 3

【输出样例3】

10

【原题链接】

https://www.acwing.com/problem/content/4799/


【题目分析】

动态规划题,需要平时积累,详细讲解见 y总讲解录像:链接

image-20230115160302183

【复盘后的优化代码】✅

#include<bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;
typedef long long ll;

ll s[N], dp[N];
int n, x;

int main() {
    ios::sync_with_stdio(false);  //cin读入优化
    cin.tie(0);

    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> x;
        s[x] += x;  // s数组类似于"桶",这里的"桶"直接存储总和
    }

    // 动态规划
    for (int i = 1; i <= N - 1; ++i) {
        // 状态转移方程
        dp[i] = max(dp[i - 1], dp[(max(0, i - 2))] + s[i]);
    }

    cout << dp[N - 1] << endl;

    return 0;
}

【周赛现场 AC 代码】

该题现场未AC 😂

【代码对比总结】

  • 周赛现场没能看出本题为动态规划题,导致蛮力模拟一直解不出来。说明需要 多做题,多积累

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/164749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

29.动态内存申请

1.动态内存分配的概念 在数组一章中&#xff0c;介绍过数组的长度是预先定义好的&#xff0c;在整个程序中固定不变&#xff0c;但是在实际的编程中&#xff0c;往往所需的内存空间取决于实际输入的数据&#xff0c;而无法预先确定。为了解决上述问题&#xff0c;C语言提供了一…

Linux 发布 JavaWeb 项目

Linux 发布 JavaWeb 项目 安装 mysql 使用 yum search mysql-community 查看是否安装下载地址&#xff1a;https://dev.mysql.com/downloads/repo/yum/ 选择自己虚拟机的版本 在此处&#xff0c;复制 链接地址&#xff0c; 然后使用命令 wget 链接地址 来进行 下载rpm 安装 …

Python解题 - CSDN周赛第23期 - 树形背包与优化

以问哥目前的水平来看&#xff0c;本期的四道题的整体难度还是中等偏上的&#xff0c;而且从结果上来看&#xff0c; 也达到了竞赛的标准&#xff08;只有三名选手拿到满分&#xff09;。也许在某些大佬看来还是太简单了&#xff0c;毕竟都是模板题&#xff0c;直接套模板就能过…

基于深度学习人脸性别识别项目

项目概述要求针对提供的人脸数据集&#xff0c;根据人脸图像预测人脸性别。本次将提供 20000 多张已经分割的人脸图像&#xff0c;要求基于人脸图像自动识别该人性别。数据集的年龄从 1 岁覆盖到 100 多岁&#xff0c;包括了白种人、黄种人、黑种人等多种种族数据。数据集存在人…

2022年“网络安全”赛项海南省赛选拔赛 任务书

2022年“网络安全”赛项海南省赛选拔赛 任务书 一、竞赛时间 共计6小时。 &#xff08;二&#xff09;A模块基础设施设置/安全加固&#xff08;350分&#xff09; 一、项目和任务描述&#xff1a; 假定你是某企业的网络安全工程师&#xff0c;对于企业的服务器系统&#xff0c…

【数据结构】二叉搜索树

一、概念二叉搜索树也叫二叉排序树。在一颗二叉搜索树中&#xff0c;他的左子树二点节点值一定比根节点的值小&#xff0c;他的右子树节点的值一定比根节点的值大。二、特点他的左子树节点的值一定比根节点的值小他的右子树节点的值一定比根节点的值大他的每一颗子树都是一颗二…

java+springboot笔记2023002

java的注解机制&#xff1a; Java主要提供了5个基础注解&#xff0c;分别是&#xff1a; Override Deprecated SuppressWarnings SafeVarargs FunctionalInterface Java元注解&#xff1a; Retention&#xff0c; Target&#xff0c; Inherited&#xff0c; Documented&#x…

算法刷题打卡第66天:极大极小游戏

极大极小游戏 难度&#xff1a;简单 给你一个下标从 0 开始的整数数组 nums &#xff0c;其长度是 2 的幂。 对 nums 执行下述算法&#xff1a; 设 n 等于 nums 的长度&#xff0c;如果 n 1 &#xff0c;终止 算法过程。否则&#xff0c;创建 一个新的整数数组 newNums &a…

MySQL索引命中与失效

目录创建表MySQL执行优化器索引的命中与失效情况总结讨论MySQL索引命中与失效&#xff0c;我们得先来创建表 创建表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABL…

java动态规划算法

使用场景 动态规划最重要的是转移方程&#xff0c;而转移方程需要递归和记忆化搜索产生的表&#xff0c;因此直接贴出转移方程是没什么用的&#xff0c;不探究如何从递归到记忆化搜索再到转移方程&#xff0c;还是很难想到怎么去得到转移方程。下面我们将从例子中探寻如何三步走…

四、Gradle项目的生命周期

文章目录四、Gradle项目的生命周期【尚硅谷】Gradle教程-讲师&#xff1a;刘辉 生活明朗&#xff0c;万物可爱&#xff0c;人间值得&#xff0c;未来可期 四、Gradle项目的生命周期 Gradle 项目的生命周期分为三大阶段&#xff1a;Initialization -> Configuration -> E…

Maestro 薛定谔软件简单分子对接案例

##参考&#xff1a; Maestro 薛定谔软件使用&#xff1a; https://www.bilibili.com/video/BV1RN411X7Te https://www.youtube.com/watch?vNkM8jjHr7f4&listPL3dxdlKx_PcfuvHwJ0RjpZFt4HjwyTr7f Maestro 薛定谔对接&#xff1a; https://www.bilibili.com/video/BV17p…

【Java多线程】线程的常用方法

测试Thread中的常用方法1.start():启动当前线程&#xff1b;调用当前线程的run()2.run():通常需要重写Thread类中的此方法&#xff0c;将创建的线程要执行的3.currentThread():静态方法&#xff0c;返回当前代码的线程4.getName():获取当前线程的名字5.setName():设置当前线程的…

MySQL逻辑删除+Mybatis-Plus = 墙裂推荐

目录前言逻辑删除使用Mybatis-Plus逻辑删除它做了什么注意写在后面的一些话前言 一般情况下&#xff0c;我们要删除一条数据&#xff0c;直接使用 delete 即可&#xff0c;就像这样&#xff1a;delete from user where id 1&#xff0c;这样做的好处是&#xff1a; 符合我们…

C进阶_字符串库函数

目录 求字符串长度 strlen 常规实现 递归实现 指针-指针实现 长度不受限制的字符串函数 strcpy 模拟实现strcpy strcat 模拟实现strcat strcmp 模拟实现strcmp 长度受限制的字符串函数 strncpy strncat strncmp 求字符串长度 strlen size_t strlen ( const c…

前端工具(运用造型)

CSS预处理器的使用方法 1、什么是css预处理器 CSS预处理器是一种专门的编程语言&#xff0c;用来为CSS增加一些编程特性&#xff08;CSS本身不是编程语言&#xff09;不需要考虑浏览器兼容问题&#xff0c;因为CSS预处理器最终编译和输出的仍是标准的CSS样式。可以在CSS预处理…

磨金石教育摄影技能干货分享|简述特效在影视制作中的四大作用

近三年因为疫情的原因&#xff0c;极少去影院去看电影。 想起来上次看电影还是去年八月份&#xff0c;当时上映的是科幻大作《沙丘》。看科幻电影&#xff0c;最大的期待就是导演编剧们对外星球与外太空场景的塑造。那些逼真的场景与炫酷的战舰航天器&#xff0c;满足了我对未知…

设计模式_结构型模式 -《适配器模式》

设计模式_结构型模式 -《适配器模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 概述 如果去欧洲国家去旅游的话&#xff0c;他们的插座如下图最左边&#xff0c;是欧洲标准。而我们使用的插头如下图…

Kindle 可旋转桌面时钟

前言 自己的 Kindle 吃灰很久了&#xff0c;想做个时钟用&#xff0c;但是网上可选的时钟网站比较少&#xff0c;这些时钟网站里面&#xff0c;要么太简单 界面也比较丑陋&#xff0c;要么内容太多 有些本末倒置了&#xff0c;要么网址特别长 输入网址的时候太麻烦。 干脆自己…

【ROS】—— 机器人导航(仿真)—导航原理(十七)

文章目录前言1. 导航模块简介1.1 全局地图1.2 自身定位1.3 路径规划1.4 运动控制1.5 环境感知2. 导航之坐标系前言 &#x1f4e2;本系列将依托赵虚左老师的ROS课程&#xff0c;写下自己的一些心得与笔记。 &#x1f4e2;课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ …