牛客小白月赛83 解题报告

2023-12-17

题目链接:

https://ac.nowcoder.com/acm/contest/72041#question



A题

解题思路

签到

代码

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

int main() {
    int a, b, c, d, e;
    cin >> a >> b >> c >> d >> e;
    int A, B, C, D;
    cin >> A >> B >> C >> D;
    if (a * A + b * B + c * C - d * D > e)
        cout << "YES\n";
    else
        cout << "NO\n";
    
    return 0;
}


B题

解题思路

贪心,很显然,我们应该尽可能将更大的魔法1用于更大的魔法2。
所以先将两个数组从大到小排序。
一个小细节是:如果当前直接使用魔法2就能击败,那么就直接使用魔法2,没必要先使用魔法1。以及如果当前魔法1是1,那么也没必要使用。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e4 + 10;
int a[maxn], b[maxn];

void solve() {
    int n, m, x;
    cin >> n >> m >> x;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++) {
        cin >> b[i];
    }

    sort(a + 1, a + 1 + n, greater<int>());
    sort(b + 1, b + 1 + n, greater<int>());

    int cnt = 0, i = 1, j = 1;
    while(j <= n) {
        int f1 = a[i] * b[j];
        int f2 = b[j];
        if (f1 > f2 && x > f2) {
            cnt += 2;
            x -= f1;
            i++;
            j++;
        } else {
            cnt++;
            x -= f2;
            j++;
        }
        if (x <= 0)
            break;
    }
    if (x <= 0)
        cout << cnt << "\n";
    else
        cout << -1 << "\n";
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cout << fixed;
    cout.precision(18);

    solve();

    return 0;
}


C题

解题思路

看见题面是Minecraft MITE直接肃然起敬。
根据题意很容易分析出,只有三种方案可以做出铜镐:
1、16个铜粒。
2、12个铜粒+4个银粒。
3、12个铜粒+4个金粒。
将三种方案的概率相加即可。
公式如下:
在这里插入图片描述


代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e4 + 10;
//double PJIN[20], PYIN[20], PTONG[20];

double pow(double b, int e) {
    if (e == 0)return 1;
    if (e == 1)return b;
    double res = pow(b, e / 2);
    if (e % 2 == 0) {
        return res * res;
    }
    else {
        return res * res * b;
    }
}
double Power(double base, int exponent) {
    if (exponent == 0)return 1;
    if (exponent == 1)return base;
    if (exponent < 0) {
        return pow(1 / base, -exponent);
    }
    else {
        return pow(base, exponent);
    }

}

void solve() {
    double a, b, c;
    cin >> a >> b >> c;
    double pTong = a / 16;
    double pYin = b / 16;
    double pJin = c / 16;
    double tongGao = Power(pTong, 12);
    // 方案一:4铜粒(工作台) + 12铜粒(一个铜稿子)
    double f1 = Power(pTong, 4) * tongGao;
    // 方案二:4银粒(工作台) + 12
    double f2 = Power(pYin, 4) * tongGao * 1820;    // C(16, 4) = 1820
    // 方案三:4金粒 + 12
    double f3 = Power(pJin, 4) * tongGao * 1820;
    cout << (f1 + f2 + f3) << "\n";
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cout << fixed;
    cout.precision(18);

    int t;
    cin >> t;
    while (t--)
        solve();

    return 0;
}


D题

解题思路

n <= 500,所以O(n^3)也是能过的。
考虑找出左端点为ch1,右端点为ch2,长度为k的子序列数量,假设有si == ch1,sj == ch2,那么[i, j]这段子串对于答案的贡献为C(j - i - 1, k - 2)。
因为这相当于在固定了si和sj的情况下,在中间j - i - 1个字符([i + 1, j - 1]这个子串)中选择k - 2个字符。
我们可以考虑先预处理出答案,暴力枚举,第一层循环枚举左端点,第二层循环枚举右端点,第三层循环枚举子序列长度,统计出数量。对于组合数我们可以先用杨辉三角预处理出来。
详见代码和注释。

代码

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 5e2 + 10;
const int INF = 0x3fffffff;
const ll mod = 998244353;
ll c[maxn][maxn];
string s;
int n;
ll ans[300][maxn][maxn];     // 预处理答案,ans[ch1][ch2][k]代表在字符串s中左端点为ch1,右端点为ch2,长度为k的子序列的数量

void initC() {
    for (int i = 0; i <= n; i++) {
        c[i][i] = 1;
        c[i][0] = 1;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < i; j++) {
            c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
        }
    }
}

void init() {
    // 用杨辉三角预处理组合数
    initC();

    // 预处理
    for (int i = 0; i < n; i++) {   // 枚举左端点
        for (int j = i + 1; j < n; j++) {   // 枚举右端点
            for (int k = 2; k <= j - i + 1; k++) {  // 枚举序列长度
                char ch1 = s[i];
                char ch2 = s[j];
                // 当左端点为i右端点为j,能贡献出C(j - i - 1, k - 2)个长度为k的左端点si,左端点sj的子序列
                ans[ch1][ch2][k] += c[j - i - 1][k - 2];    // 将贡献数量加到对应的答案记录
                ans[ch1][ch2][k] %= mod;
            }
        }
    }
}

void solve() {
    cin >> n;
    cin >> s;
    // 预处理
    init();
    
    // 询问查询
    int m;
    cin >> m;
    while (m--) {
        char ch1, ch2;
        cin >> ch1 >> ch2;
        int len;
        cin >> len;
        cout << ans[ch1][ch2][len] << endl;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cout << fixed;
    cout.precision(18);

    solve();
    return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

牛客小白月赛83 解题报告 的相关文章

  • yyy666

    6
  • Tekton 构建容器镜像

    Tekton 构建容器镜像 介绍如何使用 Tektonhub 官方 kaniko task 构建docker镜像 并推送到远程dockerhub镜像仓库 kaniko task yaml文件下载地址 https hub tekton dev

随机推荐

  • 目标检测YOLO实战应用案例100讲-自动驾驶复杂场景下目标检测(续)

    目录 3 2 YOLOv5框架的分析 3 3改进算法的基本思想 3 4改进聚类算法 3 5重构损失函数模型和NMS算法 lt
  • 008 Windows注册表

    一 注册表基础 1 概述 注册表 Registry 繁体中文版 Windows 操作系统称之为登录档案 是 Microsoft Windows 中的一个重要的数据库 用于 存储系统 和 应用程序 的设置信息 早在 Windows 3 0 推
  • 时序预测 | Python实现CNN电力需求预测

    时序预测 Python实现CNN电力需求预测 目录 时序预测 Python实现CNN电力需求预测 预测效果 基本描述 程序设计 参考资料
  • 海尔2024届秋招/校招内推信息/内推码

    公司名称 海尔 内推码 GHJ110 内推来源 内推鸭小程序 官方招聘网站 海尔招聘 海尔官方招聘网站
  • 每日一练2023.12.17——大笨钟的心情【PTA】

    题目链接 L1 077 大笨钟的心情 题目要求 有网友问 未来还会有更多大笨钟题吗 笨钟回复说 看心情 本题就请你替大笨钟写一个程序 根据心情自动输出回答 输入格式 输入在一行中给出 24 个 0 100 区间内的整数 依次代表大笨钟在一天
  • 挖矿木马应急响应-案例分析

    挖矿木马应急响应 案例分析 linux 终端无法使用系统资源使用异常高 首先解决linux命令无法使用的问题 显示libc so 6 没有重新连接一下libc文件 查看日志 发现木马运行成功后就日志一直报libc错误 根据信息向上插在日志
  • 2023年总结,讲讲我的故事吧,十年

    文章目录 2023 前十年 后十年 周末 本该是提升自己的最好时机 也该是出去玩的大好时光 但是毫无意外的 在家躺了一天 单纯的有点累 2023年 发生了好多事情 又好像没发生几件事 可能毕业季的我 走过了太多复杂的心路历程吧 身边的人 是
  • 服务器安全的威胁和防范

    由于服务器发挥着至关重要的作用 因此存储在服务器上的机密数据和信息非常具有价值 做好服务器安全至关重要 常见的服务器 安全隐患 包括 1 恶意的攻击 遭受CC攻击和DDoS攻击 导致游戏或是网站打不开 严重影响业务开展 2 网站挂马 网站被
  • 代码随想录算法训练营Day3 | 203.移除链表元素、707.设计链表、59.螺旋矩阵II

    LeetCode 203 移除链表元素 本题思路 就是常规的移除链表中的元素的操作 需要注意的点 头节点 head val val 的情况的处理 如果 head val val 就要继续往后 head head next 因此我们要遍历到第
  • 最强姿态模型 mmpose 使用实例

    mmpose 介绍 https blog csdn net jacke121 article details 135040186 图片姿态实例 本机地址 B project pose mmpose dev 1 x Copyright c O
  • Arrays.asList()方法:陷阱与解决之道

    在Java编程中 Arrays类提供了一系列用于操作数组的实用方法 其中 Arrays asList 方法是一个常用的方法 用于快速将数组转换为List集合 然而 这个方法存在一些潜在的陷阱 可能导致出现意外的行为 本文将介绍 Arrays
  • DSP捕获输入简单笔记

    程序 cap c Created on 2023年12月16日 Author My PC include cap h void cap init EALLOW SysCtrlRegs PCLKCR3 bit GPIOINENCLK 1 gp
  • 蓝禾2024届秋招/校招内推信息/内推码

    公司名称 蓝禾 内推码 SQDPVPM 内推来源 内推鸭小程序 官方招聘网站 https lanhevip jobs feishu cn index m position external referral code SQDPVPM
  • 007 Windows组策略

    组策略的应用 1 基本概念 组策略是一组策略的集合 组策略 英语 Group Policy 是 微软 Windows NT 家族操作系统的一个特性 它可以控制 用户帐户 和计算机帐户的工作环境 组策略提供了操作系统 应用程序 和 活动目录
  • 剑指 Offer(第2版)面试题 35:复杂链表的复制

    剑指 Offer 第2版 面试题 35 复杂链表的复制 剑指 Offer 第2版 面试题 35 复杂链表的复制 解法1 模拟 剑指 Offer 第2版 面试题 35 复杂链表的复制 题目来源 48 复杂链表的复刻 解法1 模拟 算法 复制原
  • mmpose 使用笔记

    目录 自己整理的可以跑通的代码 图片demo 检测加关键点 自己整理的可以跑通的代码 最强姿态模型 mmpose 使用实例 CSDN博客 图片demo python demo image demo py tests data coco 00
  • 2023“楚怡杯”湖南省赛“信息安全管理与评估“--数字取证调查(高职组)

    2023 楚怡杯 湖南省 信息安全管理与评估 高职组 任务书 2023 楚怡杯 湖南省 信息安全管理与评估 高职组 任务书 第一阶段竞赛项目试题 第二阶段竞赛项目试题 第二部分 数字取证调查 需
  • python快速实现简单的图片透明化

    整张图片透明化的完整代码如下 import os import glob from PIL import Image def convert to transparent image path output folder image Ima
  • Llama 架构分析

    从代码角度进行Llama 架构分析 Llama 架构分析 前言 Llama 架构分析 分词 网络主干 DecoderLayer
  • 牛客小白月赛83 解题报告

    题目链接 https ac nowcoder com acm contest 72041 question A题 解题思路 签到 代码 include