StarryCoding入门教育赛2 题解 C++代码(推荐学习)

news2024/11/25 9:44:39

比赛地址:https://www.starrycoding.com/contest/6

比赛介绍

  • 系列赛名称:StarryCoding 入门教育赛
  • 难度:语法~较低
  • 时长: 1.5 1.5 1.5小时
  • 比赛时间:约每2-3天一场,一般为晚上18:30~20:00
  • 赛后题解:赛后立即发布,包含文字题解
  • Rating结算范围: < 3000 < 3000 <3000

面向群体

  • 有学习过程序设计课程,希望提高自己的编程水平、思维能力、算法能力的同学。
  • 准备参加各种程序设计、算法竞赛(例如ACM、蓝桥杯、GPLT天梯赛等)的同学。
  • 希望通过保/考研的机试就业的算法笔/面试的同学。
  • 非计算机专业,但对编程/算法感兴趣的同学。
  • 想要感受编程竞赛的计算机专业新生同学。

在这里插入图片描述

A 平方和判定

输入三个整数 a , b , c a, b, c a,b,c,判断是否满足 a 2 + b 2 > c 2 a^2 + b^2 > c^2 a2+b2>c2,直接用if分支语句判断,或用三目运算符进行判断即可。

考察输入输出与分支语句。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

void solve()
{
    ll a, b, c;
    cin >> a >> b >> c;
    cout << (a * a + b * b > c * c ? "YES" : "NO") << '\n';
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _;
    cin >> _;
    while (_--)
        solve();
    return 0;
}

B 矩阵判定

枚举四元组 ( i 1 , j 1 , i 2 , j 2 ) (i_1, j_1, i_2, j_2) (i1,j1,i2,j2),判断对于所有四元组是否满足 A i 1 , j 1 + A i 2 , j 2 > A i 2 , j 1 + A i 1 , j 2 A_{i_1, j_1}+A_{i_2,j_2} > A_{i_2,j_1}+A_{i_1, j_2} Ai1,j1+Ai2,j2>Ai2,j1+Ai1,j2即可。

时间复杂度为 O ( n 2 m 2 ) O(n^2m^2) O(n2m2)

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 53;
ll a[N][N];
void solve()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            cin >> a[i][j];
    for (int i = 1; i <= n; ++i)
    { // i1
        for (int j = i + 1; j <= n; ++j)
        { // i2
            for (int k = 1; k <= m; ++k)
            { // j1
                for (int l = k + 1; l <= m; ++l)
                { // j2
                    if (a[i][k] + a[j][l] <= a[i][l] + a[j][k])
                    {
                        cout << "NO\n";
                        return;
                    }
                }
            }
        }
    }
    cout << "YES\n";
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _;
    cin >> _;
    while (_--)
        solve();
    return 0;
}

C 曼哈顿种类

枚举所有点对,计算其曼哈顿距离后放入 s e t set set中计算 s i z e size size,或放入数组中排序去重。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int N = 1e3 + 9;

ll x[N], y[N];

ll getabs(ll x) { return x < 0 ? -x : x; }

void solve()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> x[i] >> y[i];
    set<ll> st;
    for (int i = 1; i <= n; ++i)
        for (int j = i + 1; j <= n; ++j)
        {
            st.insert(getabs(x[i] - x[j]) + getabs(y[i] - y[j]));
        }
    cout << st.size() << '\n';
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _;
    cin >> _;
    while (_--)
        solve();
    return 0;
}

D 小e消消乐

根据题意,我们要联想到“栈”这个数据结构,并且注意题目中的弹珠大小不是 A i A_i Ai,而是 2 A i 2^{A_i} 2Ai哟,所以两个大小相等的弹珠合并,相当于把指数(也就是 A i A_i Ai)增加 1 1 1,而不是翻倍哦。

一些细节需要考虑,例如用while而不是if、栈内元素数量得大于 2 2 2才能合并等等。

#include <bits/stdc++.h>
using namespace std;

using ll = long long;
const ll N = 1e5 +9;
ll a[N];

int main() 
{
    int n; cin >> n;
    int cnt = 0;
    for (int i = 1; i <= n; ++ i)
    {
        cin >> a[++ cnt];
        while(cnt >= 2 && a[cnt] == a[cnt - 1])
            a[-- cnt]++;
    }
    cout << cnt << '\n';

    return 0;
}

E 妹妹太多怎么办呐!

首先通过数据范围猜测,可以接受时间复杂度 O ( n ! ) O(n!) O(n!)的做法,于是大胆去想 d f s dfs dfs

对于一种方案,实际上是一种“坐标的排列”,只要坐标排列确定了,那么最终的愉悦度也确定了,于是可以通过 d f s dfs dfs枚举所有的方案,对于每种方案计算结果取最大即可。

这里需要注意的细节是,愉悦度不是单调的,有可能为负数。

如果对dfs深度优先搜索算法不熟悉的同学,推荐先看一下《算法基础课》https://www.starrycoding.com/course/1

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int N = 20;

ll x[N], y[N], a[N];

ll getabs(ll x) { return x < 0 ? -x : x; }

ll dist(ll u, ll v)
{
    return getabs(x[u] - x[v]) + getabs(y[u] - y[v]);
}

bitset<12> vis;
int n, k;
ll ans, asum;
int f[N]; // 表示选出的排列
// dep是层数,sum是当前的愉悦度
void dfs(int dep, ll sum)
{
    if(sum + asum <= ans)return;
    // 递归出口
    if (dep == k + 1)
    {
        ans = max(ans, sum);
        return;
    }

    for (int i = 1; i <= n; ++i)
    {
        // 已经去过了
        if (vis[i])
            continue;
        f[dep] = i;
        vis[i] = true;
        dfs(dep + 1, sum + a[i] - dist(f[dep - 1], i));
        vis[i] = false;
    }
}

void solve()
{
    cin >> n >> k;
    for (int i = 1; i <= n; ++i)
        cin >> x[i] >> y[i] >> a[i];
    asum = 0;
    for(int i = 1;i <= n; ++ i)asum += a[i];
    ans = -2e18;
    vis.reset();
    dfs(1, 0);
    cout << ans << '\n';
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _;
    cin >> _;
    while (_--)
        solve();
    return 0;
}

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

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

相关文章

饥荒服务器搭建centos

服务器环境需要64位32位不可用 uname -r 查看服务器版本 更新yum sudo yum update 安装依赖环境 sudo yum -y install glibc.i686 libstdc.i686 libcurl4-gnutls-dev.i686 libcurl.i686 screen 安装steam cd /home && mkdir steamcmd && cd steamcmd 国…

人工智能的发展将如何重塑网络安全

微信搜索关注公众号网络研究观&#xff0c;获取更多信息。 人们很容易认为人工智能 (AI) 真正出现是在 2019 年&#xff0c;当时 OpenAI 推出了 ChatGPT 的前身 GPT-2。 但现实却有些不同。人工智能的基础可以追溯到 1950 年&#xff0c;当时数学家艾伦图灵发表了题为“计算机…

资源池管理

资源池相关概念 1、什么是资源池 资源池是灵活管理资源的逻辑抽象。资源池可以分组为层次结构&#xff0c;用于对可用的CPU和内存资源按层次结构进行分区。 2、为什么使用资源池 使用资源池可以委派对主机(或集群)资源的控制权&#xff0c;在使用资源池划分群集内的所有资 源时…

PopChar for Mac v10.1激活版:特殊字符输入工具

PopChar for Mac是一款专为Mac用户设计的字符输入工具&#xff0c;其简单直观的功能使得查找和插入特殊字符变得轻而易举。 PopChar for Mac v10.1激活版下载 首先&#xff0c;PopChar为Mac提供了访问所有字体字符的能力&#xff0c;包括那些难以通过键盘直接输入的字符。用户只…

延时任务通知服务的设计及实现(三)-- JDK的延迟队列DelayQueue

一、接着上文 上文我们讲述了使用redisson的RDelayedQueue实现分布式延迟队列&#xff0c;本文我们将自己JDK的延迟队列DelayQueue实现。 相比前者的实现&#xff0c;作为进程内的延迟队列&#xff0c;它会遇到许多技术难点&#xff1a; 如何支持分布式的多个节点部署场景应…

vue cli 自定义项目架子,vue自定义项目架子,超详细

脚手架Vue CLI基本介绍&#xff1a; Vue CLI 是Vue官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子【集成了webpack配置】 脚手架优点&#xff1a; 开箱即用&#xff0c;零配置内置babel等工具标准化的webpack配置 脚手架 VueCLI相关命令…

Mac跑llama.cpp过程中遇到的问题

原repo 在华为手机上安装termux、下载库&#xff1a;顺利在电脑上安装Android NDK&#xff1a;先下载Android Studio&#xff0c;再在里面下载Android SDK 安装Android Studio时&#xff0c;SDK的某些组件总是下载不成功。后来关了梯子、改了hosts&#xff0c;重新安装就成功了…

汇编语言——比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示MATCH, 不相同则显示NO MATCH

CMPS 串比较指令&#xff1a; CMPS SRC, DST CMPSB &#xff08;字节&#xff09; CMPSW &#xff08;字&#xff09; 执行操作&#xff1a; ((SI)) - ((DI)) 根据比较结果置条件标志位&#xff1a;相等 ZF1&#xff1b;不等 ZF0 字节操作&#xff1a;(SI)←(SI)1, (DI)←(DI…

【算法系列】链表

目录 常用技巧 常用操作 leetcode/牛客题目 一、移除链表元素 二、反转链表 三、链表的中间结点 四、返回倒数第k个节点 五、合并两个有序链表 六、链表分割 七、链表的回文结构 八、相交链表 九、环形链表 十、环形链表 II 十一、随机链表的复制 十二、两数相加…

英语学习笔记2——Is this your ...?

Is this your …? 这是你的 … 吗&#xff1f; 词汇 Vocabulary pen n. 笔 不仅指钢笔&#xff0c;是笔的统称 相关&#xff1a;ball pen n. 圆珠笔    pencil n. 铅笔    marker n. 记号笔 book n. 书 横着翻的本子或书 补充&#xff1a;pad n. 本子 竖着翻的本子或…

在Codelab对llama3做Lora Fine tune微调

Unsloth 高效微调大模型的工具&#xff0c;通过Unsloth微调Llama3, Mistral, Gemma 速度提升2-5倍&#xff0c;内存减少70%&#xff01; Codelab 创建一个jupyter notebook 选择 T4 GPU 安装Fine tune 相关的lib %%capture import torch major_version, minor_version torch…

软考中级-软件设计师(九)数据库技术基础 考点最精简

一、基本概念 1.1数据库与数据库系统 数据&#xff1a;是数据库中存储的基本对象&#xff0c;是描述事物的符号记录 数据库&#xff08;DataBase&#xff0c;DB&#xff09;&#xff1a;是长期存储在计算机内、有组织、可共享的大量数据集合 数据库系统&#xff08;DataBas…

Navicat for MySQL Mac:数据库管理与开发的理想工具

Navicat for MySQL Mac是一款功能强大的数据库管理与开发工具&#xff0c;专为Mac用户设计&#xff0c;旨在提供高效、便捷的数据库操作体验。 它支持创建、管理和维护MySQL和MariaDB数据库&#xff0c;通过直观的图形界面&#xff0c;用户可以轻松进行数据库连接、查询、编辑和…

力扣:221. 最大正方形

221. 最大正方形 在一个由 0 和 1 组成的二维矩阵内&#xff0c;找到只包含 1 的最大正方形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [["1","0","1","0","0"],["1","0"…

数字藏品平台遭受科技攻击时的防护策略与攻击类型判定

随着区块链技术和数字经济的飞速发展&#xff0c;数字藏品平台逐渐成为炙手可热的投资领域。然而&#xff0c;这也使其成为了黑客攻击的重要目标。本文将深入探讨数字藏品平台可能遭遇的几种主要科技攻击类型&#xff0c;并提出相应的防护措施和判定方法。 一、51%攻击 攻击描…

太速科技-FMC377_双AD9361 射频收发模块

FMC377_双AD9361 射频收发模块 FEATURES&#xff1a; ◆ Coverage from 70M ~ 6GHz RF ◆ Flexible rate 12 bit ADC/DAC ◆ Fully-coherent 4x4 MIMO capability, TDD/FDD ◆ RF ports: 50Ω Matched ◆ support both internal reference and exter…

cmake进阶:变量的作用域说明二(从函数作用域方面)

一. 简介 前一篇文章从函数作用域方面学习了 变量的作用域。文章如下&#xff1a; cmake进阶&#xff1a;变量的作用域-CSDN博客 本文继续从函数作用域方面学习了 变量的作用域。 二. 变量的作用域 1. 函数内定义与外部同名的变量 向顶层 CMakeLists.txt添加如下代码&a…

leetcode-缺失的第一个正整数-96

题目要求 思路 1.这里的题目要求刚好符合map和unordered_map 2.创建一个对应map把元素添加进去&#xff0c;用map.find(res)进行查找&#xff0c;如果存在返回指向该元素的迭代器&#xff0c;否则返回map::end()。 代码实现 class Solution { public:int minNumberDisappeare…

项目管理-干系人管理

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 1.干系人管理-主要框架 重点内容&#xff1a; ①ITTO 输入&#xff0c;输出工具和技术。 ②问题和解决方案。 ③论文可以结合范围&am…

[Linux][网络][TCP][三][超时重传][快速重传][SACK][D-SACK][滑动窗口]详细讲解

目录 1.超时重传1.什么是超时重传&#xff1f;2.超时时间是如何确定的&#xff1f; 2.快速重传3.SACK4.D-SACK1.ACK丢失2.网络延迟 5.滑动窗口0.问题抛出1.发送方的滑动窗口2.如何表示发送方的四个部分&#xff1f;3.接收方的滑动窗口4.滑动窗口的完善理解 1.超时重传 1.什么是…