牛客小白月赛99(上)

news2024/11/24 11:55:30

材料打印

题目描述

登录—专业IT笔试面试备考平台_牛客网

运行代码

#include<iostream>
using namespace std;
int main(){
    int T;
    cin>>T;
    while(T--){
long long int a,b,x,y;
    cin>>a>>b>>x>>y;
        if(x<=y){
            cout<<a*x+b*y<<endl;
        }
        else
        {
            cout<<a*y+b*y<<endl;
        }
    
    }
    return 0;
}

代码思路

一、整体思路

  1. 首先从输入中获取测试数据的组数 T
  2. 对于每组测试数据,分别读取 a(既可以黑白打印也可以彩印的页数)、b(必须彩印的页数)、x(黑白打印一页的价格)、y(彩色打印一页的价格)。
  3. 比较黑白打印价格 x 和彩色打印价格 y 的大小,以确定对于既可以黑白打印也可以彩印的那部分 a 页如何选择打印方式,从而使得总花费最小。
  4. 最后输出每组测试数据的最小花费。

二、具体原理

  1. 输入数据部分

    • 通过 cin>>T 读取测试数据组数 T
    • 在循环中,使用 cin>>a>>b>>x>>y 依次读取每组测试数据中的四个整数,分别代表可黑白或彩印的页数 a、必须彩印的页数 b、黑白打印一页的价格 x 和彩色打印一页的价格 y
  2. 计算最小花费部分

    • 如果黑白打印价格 x 小于等于彩色打印价格 y,那么对于既可以黑白打印也可以彩印的 a 页选择黑白打印,花费为 a*x,而必须彩印的 b 页花费为 b*y,总花费为 a*x + b*y,所以输出 a*x+b*y
    • 如果黑白打印价格 x 大于彩色打印价格 y,那么对于既可以黑白打印也可以彩印的 a 页选择彩色打印,此时这部分的花费为 a*y,再加上必须彩印的 b 页花费 b*y,总花费为 a*y+b*y,输出 a*y+b*y

多米诺骨牌

题目描述

登录—专业IT笔试面试备考平台_牛客网

运行代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

int main() {
    int _;
    cin >> _;
    while (_--) {
        int n, m;
        cin >> n >> m;
        vector<PII> p(n + 1);
        for (int i = 1; i <= n; ++i) cin >> p[i].first;
        for (int i = 1; i <= n; ++i) cin >> p[i].second;
        sort(p.begin() + 1, p.begin() + n + 1, [](PII a, PII b) {
            return a.second < b.second;
        });
        int ans = 0;
        int mx = p[1].second;
        int now = p[1].first;
        int pu = 1;
        priority_queue<int> pq;
        for (int i = 2; i <= n; ++i) {
            if (p[i].second <= mx + now) {
                ++pu;
                if (mx + now < p[i].first + p[i].second) {
                    mx = p[i].second;
                    now = p[i].first;
                }
            } else {
                pq.push(pu);
                pu = 1;
                mx = p[i].second;
                now = p[i].first;
            }
        }
        pq.push(pu);
        while (pq.size() && m--) {
            ans += pq.top();
            pq.pop();
        }
        cout << ans << '\n';
    }
    return 0;
}

代码思路

一、整体思路

  1. 首先从输入中获取测试数据的组数 T
  2. 对于每组测试数据,读取骨牌总数 n 和最多可推倒的骨牌数 m,以及各个骨牌的高度和位置信息。
  3. 对骨牌按照位置进行排序,然后通过遍历骨牌,利用优先队列(堆)来统计连续倒塌的骨牌数量,并在最多可推倒 m 张骨牌的限制下,计算出最多会有多少张骨牌倒塌。

二、具体原理

  1. 输入数据部分

    • 通过 cin >> _ 读取测试数据组数 T,并在循环中处理每组数据。
    • 对于每组数据,使用 cin >> n >> m 读取骨牌总数 n 和最多可推倒骨牌数 m
    • 接着使用两个循环分别读取骨牌的高度和位置信息,存储在 vector<PII> p(n + 1) 中,其中 PII 是 pair<int, int> 的别名,表示一个包含骨牌高度和位置的对。
  2. 处理数据部分

    • 首先对骨牌按照位置进行排序,使用自定义的比较函数 [](PII a, PII b) { return a.second < b.second; },确保位置较小的骨牌排在前面。
    • 初始化一些变量,如 ans 用于记录最终的倒塌骨牌总数,mx 记录当前连续倒塌骨牌中最右边骨牌的位置,now 记录当前连续倒塌骨牌中最右边骨牌的高度加上其位置,pu 记录当前连续倒塌的骨牌数量。
    • 然后遍历排序后的骨牌:如果当前骨牌的位置在已倒塌骨牌的范围内(即 p[i].second <= mx + now),则增加连续倒塌的骨牌数量 pu,并更新 mx 和 now。如果当前骨牌的位置不在已倒塌骨牌的范围内,则将当前的连续倒塌骨牌数量 pu 放入优先队列(堆)pq 中,重置 pumx 和 now
    • 遍历完成后,将最后一组连续倒塌的骨牌数量也放入优先队列。
  3. 计算最多倒塌骨牌数部分

    • 当优先队列非空且还有可推倒的骨牌数 m 时,从优先队列中取出最大的连续倒塌骨牌数量,累加到 ans 中,并减少可推倒的骨牌数 m
    • 最后输出 ans,即最多会有多少张骨牌倒塌。

自爆机器人

题目描述

登录—专业IT笔试面试备考平台_牛客网

运行代码


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int N = 2e5 + 7, INF = 0x3f3f3f3f, MOD = 1e9 + 7;
int n, m, t, a[N];
vector<int> v;
bool f[N];

void solve() {
    v.clear();
    cin >> n >> m >> t;

    for (int i = 0; i <= t; i++) f[i] = false;
    f[n] = true;

    for (int i = 1; i <= m; i++) cin >> a[i];
    sort(a + 1, a + 1 + m);
    for (int i = 1; i < m; i++) v.push_back(a[i + 1] - a[i]);
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());

    int ans = 0;
    for (int i = n; i <= t; i++) {
        if (!f[i]) continue;
        ans = i;
        for (auto x: v) {
            if (i + 2 * x > t) break;
            f[i + 2 * x] = true;
        }
    }
    cout << ans << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int tc = 1;
    cin >> tc;
    while (tc--) solve();
    return 0;
}

代码思路

一、整体思路

  1. 首先从输入中获取测试数据的组数 T
  2. 对于每组测试数据,读取怪物的坐标 n、可建造或摧毁墙壁的坐标数 m、最大起爆时间 t,以及可建造或摧毁墙壁的坐标数组 a
  3. 对可建造或摧毁墙壁的坐标进行排序和去重处理,得到不同的墙壁间隔距离集合 v
  4. 从怪物的位置开始,向最大起爆时间方向遍历,利用动态规划的思想,通过已知可达位置推导出新的可达位置,最终找到在最大起爆时间内能够到达的最大坐标,即对怪物造成的最大伤害。

二、具体原理

  1. 输入数据部分

    • 通过 cin >> tc 读取测试数据组数 T,并在循环中处理每组数据。
    • 对于每组数据,使用 cin >> n >> m >> t 读取怪物的坐标 n、可建造或摧毁墙壁的坐标数 m、最大起爆时间 t
    • 接着使用循环读取可建造或摧毁墙壁的坐标,存储在数组 a 中。
  2. 预处理部分

    • 对可建造或摧毁墙壁的坐标进行排序,使用 sort(a + 1, a + 1 + m)
    • 计算相邻墙壁之间的间隔距离,存储在向量 v 中,并对 v 进行去重处理,使用 sort(v.begin(), v.end()) 和 v.erase(unique(v.begin(), v.end()), v.end())
  3. 计算最大伤害部分

    • 初始化一个布尔数组 f,表示在某个时间点是否可达,初始时只有怪物的位置在时间 n 时可达,即 f[n] = true
    • 从怪物的位置开始向最大起爆时间方向遍历,对于每个可达的位置 i,如果 i 大于最大起爆时间 t,则跳出循环。
    • 如果 f[i] 为 false,表示在时间 i 不可达,继续下一个位置的判断。
    • 如果 f[i] 为 true,表示在时间 i 可达,更新最大伤害 ans 为当前可达的最大时间 i
    • 对于每个可达位置 i,遍历不同的墙壁间隔距离集合 v,如果 i + 2 * x 超过最大起爆时间 t,则跳出循环,否则将 f[i + 2 * x] 设为 true,表示在时间 i + 2 * x 也可达。
  4. 输出结果部分最终输出最大伤害 ans,即对怪物造成的最大伤害。

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

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

相关文章

微软数据库的SQL注入漏洞解析——Microsoft Access、SQLServer与SQL注入防御

说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 。…

Luigi:一个强大的Python模块,构建复杂的批处理作业管道的高效工具

在现代数据处理的大潮中&#xff0c;构建和管理复杂的数据管道是极其重要的一环。Luigi&#xff0c;作为一个强大的Python模块&#xff0c;为用户提供了构建复杂的批处理作业管道的高效工具。它不仅能够处理依赖关系、工作流管理、可视化等功能&#xff0c;还内置对Hadoop的支持…

架构与业务的一致性应用:实现企业战略目标和合规管理的全面指南

在当今快速变化的数字经济中&#xff0c;信息架构已成为企业实现其业务目标、优化运营效率和确保数据安全的关键工具。 一个成功的信息架构不仅要与企业的战略目标紧密对齐&#xff0c;还必须遵循日益严格的合规性要求&#xff0c;以保护敏感数据并满足法规规定。《信息架构&a…

Django 创建好的模块怎么在后台显示

1、配置模型及其需要显示的数据 刚才创建好的tests的增删改查&#xff0c;在后台是不显示的&#xff0c;所以需要进行配置,在刚才创建好的模块里找到admin.py文件&#xff0c;在里面进行如下配置 from django.contrib import adminfrom . import models from .models import …

【多线程】深入剖析定时器的应用

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 在软件开发中&#xff0c;有一些代码逻辑并不需要立马就被执行&#xff0c;可能需要等一段时间在执行。就好像我们会用闹钟来提醒我们过一段时间后要做某事一样&#xff0c;代码…

电脑文件怎么加密?文件加密方法介绍

随着数字化时代的到来&#xff0c;电脑文件的安全性问题日益凸显。为了保护个人隐私和企业数据&#xff0c;文件加密成为了一项重要的安全措施。本文将详细介绍几种常见的电脑文件加密方法&#xff0c;帮助你更好地保护自己的数据安全。 超级加密3000 超级加密3000提供了两种主…

哪款骨传导耳机适合运动?健身党无广安利五款有用的骨传导耳机!

作为一名耳机爱好者&#xff0c;我的耳机收藏可以说是丰富多样&#xff0c;从追求极致音质的头戴式&#xff0c;到便于携带的入耳式&#xff0c;再到近年来兴起的骨传导耳机&#xff0c;我都有所体验。在众多选择中&#xff0c;我最终偏爱上了骨传导耳机&#xff0c;它以其独特…

【Cadence26】无原理图直接绘制PCB项目的问题总结

【转载】Cadence Design Entry HDL 使用教程 【Cadence01】Cadence PCB Edit相对延迟与绝对延迟的显示问题 【Cadence02】Allegro引脚焊盘Pin设置为透明 【Cadence03】cadence不小心删掉钢网层怎么办&#xff1f; 【Cadence04】一般情况下Allegro PCB设计时的约束规则设置&a…

I-RNTI是什么?

I-RNTI是Inactive RNTI的缩写&#xff0c;它是per RNA配置的一个参数, 主要作用就是UE在RRCResume的时候, 方便new gNB去获取UE之前的锚点gNB(从而获取UE上下文)。 在R2-1812504中有关I-RNTI的agreement如上图&#xff1a; 1 gNB 在suspend消息中为 UE 配置full I-RNTI 和shor…

AI网盘搜索 1.2.6 智能文件搜索助手,一键搜索所有资源

对于经常需要处理大量文件的人来说&#xff0c;AI网盘检索简直是救星。它提供了智能对话式搜索功能&#xff0c;只需用自然语言描述就能找到需要的文件。此外&#xff0c;它还广泛支持各种文件类型&#xff0c;从文档到图片&#xff0c;全面覆盖。精准定位功能让您能够快速找到…

在对接电影票API时如何快速进行错误处理和调试

在对接电影票API时&#xff0c;进行有效的错误处理和调试是确保用户体验和系统稳定性的关键。以下是一些步骤和建议&#xff1a; 1.阅读API文档&#xff1a; 在开始对接前&#xff0c;彻底理解API文档中关于错误处理的部分&#xff0c;了解可能返回的所有错误码和它们的含义。…

微信小程序 === 长列表性能优化

目录 怎么做到的&#xff1f; 环境准备 使用开发者工具调试 开始迁移 在真机上预览效果 配置 We 分析 AB 实验 快捷切换入口 如何识别当前页面是否使用 Skyline 滚动容器及其应用场景 长列表 ScrollView 的三种模式 列表模式 自定义模式 嵌套模式 可拖拽容器 对…

启明云端乐鑫代理商,乐鑫ESP32无线芯片方案,物联网设备WiFi联动控制

随着智能和远程技术的飞速发展&#xff0c;物联网(IoT)逐渐出现在我们生活的每一个角落。乐鑫以其创新的无线通信技术&#xff0c;正成为智能家居、工业自动化和医疗设备等领域的推动者。 无线WiFi芯片模组不仅提供了强大的数据处理能力&#xff0c;还赋予了设备以直观的交互方…

香橙派模型转换以及部署二

由于想更新RKNN-Tookl2的版本&#xff0c;重新做一下记录。 上一篇文章安装的是RKNN-Tookl2 v1.5.2&#xff1a; 香橙派转换模型以及在开发板上部署-CSDN博客 现在记录一下RKNN-Tookl2 v2.0.0beta0版本&#xff0c;使用起来更方便&#xff0c;且可使用的功能更多一些&#x…

容联云容犀Copilot&Agent入选《中国 AI Agent 产品罗盘》

近日&#xff0c;InfoQ研究中心推出《中国AI Agent应用研究报告》&#xff0c;并在报告中对现行的中国AI Agent产品进行梳理总结&#xff0c;并形成《中国AI Agent产品罗盘》。 作为“营销服”领域垂直类Agent&#xff0c;容联云容犀Copilot&#xff06;Agent入选2024中国AI A…

天地一体化物联网:挑战与机遇

这篇论文的标题是《Space-Terrestrial Integrated Internet of Things: Challenges and Opportunities》&#xff0c;作者包括Juan A. Fraire, Oana Iova, 和 Fabrice Valois。文章发表在2022年12月的IEEE Communications Magazine上。论文主要探讨了如何将卫星通信与物联网&am…

vue3中的实例

实例类型 Vue2&#xff1a;每个Vue应用都是new Vue创建的一个新实例&#xff0c;创建的时候将data作为property添加到响应式系统中 vue3&#xff1a;createApp创建一个Application Instance、应用实例用来注册全局内容&#xff0c;大多数方法支持链式调用&#xff0c;返回实例…

C++当中的多态(二)

(三&#xff09;final和override关键字 在继承和多态当中我们还会很经常看到这两个关键字final和override。这两个关键字的作用其实很简单。 final关键字字面意思上理解就是我们这个虚函数是最后一个虚函数&#xff0c;之后不能够被重写。所以我们以后想要定义一个虚函数只能够…

word文档的读入(7)

获取了标准答案和学生答案后&#xff0c;就可以计算每位同学的填空题分数啦。我们将分数累加到studentData字典里的scoreTwo键中。需要注意的是&#xff0c;使用这个键之前&#xff0c;必须先在第一个for循环里和第二个for循环外&#xff0c;对它进行初始化赋值为0&#xff0c;…

一文搞懂线程的生命周期以及状态

一. Java 线程生命周期概述 Java 中的线程生命周期主要分为以下五个状态&#xff1a; 新建状态&#xff08;NEW&#xff09;&#xff1a;线程被创建但尚未启动。可运行状态&#xff08;RUNNABLE&#xff09;&#xff1a;线程可以被操作系统调度执行。阻塞状态&#xff08;BLO…