【持续更新】2024牛客寒假算法基础集训营1题解 | JorbanS

news2024/11/17 1:49:38

文章目录

  • [A - DFS搜索](https://ac.nowcoder.com/acm/contest/67741/A)
  • [B - 关鸡](https://ac.nowcoder.com/acm/contest/67741/B)
  • [C - 按闹分配](https://ac.nowcoder.com/acm/contest/67741/C)
  • [D - 数组成鸡](https://ac.nowcoder.com/acm/contest/67741/D)
  • [E - 本题又主要考察了贪心](https://ac.nowcoder.com/acm/contest/67741/E)
  • [F - 鸡数题!](https://ac.nowcoder.com/acm/contest/67741/F)
  • [G - why买外卖](https://ac.nowcoder.com/acm/contest/67741/G)
  • [H - 01背包,但是bit](https://ac.nowcoder.com/acm/contest/67741/H)
  • [I - It's bertrand paradox. Again!](https://ac.nowcoder.com/acm/contest/67741/I)
  • [L - 要有光](https://ac.nowcoder.com/acm/contest/67741/L)
  • [M - 牛客老粉才知道的秘密](https://ac.nowcoder.com/acm/contest/67741/M)

A - DFS搜索

字符串匹配

int n;
string DD = "DFS", dd = "dfs";

void solve() {
    int D = 0, d = 0;
    string s; cin >> n >> s;
    for (int i = 0; i < n; i ++)
        if (s[i] == DD[D]) D ++;
        else if (s[i] == dd[d]) d ++;
    cout << (D >= 3) << ' '  << (d >= 3) << endl;
}

B - 关鸡

有以下四种基本图形,排列组合即可

在这里插入图片描述

int n;
pii a[N];

int solve() {
    cin >> n;
    for (int i = 0; i < n; i ++) cin >> a[i].bb >> a[i].aa;
    sort(a, a + n);
    int res = 3;
    bool down = false, L = false, R = false, left = false, right = false;
    bool ll = false, rr = false;
    for (int i = 0; i < n; i ++) {
        if (a[i].aa == 0 && a[i].bb == 2) down = true;
        if (a[i].aa == -1 && a[i].bb == 1) left = true;
        if (a[i].aa == 1 && a[i].bb == 1) right = true;
        if (a[i].aa < 0) ll = true;
        if (a[i].aa > 0) rr = true;
        if (i) {
            if (a[i].aa == a[i - 1].aa) {
                if (a[i].aa < 0) L = true;
                else R = true;
            } else if (a[i].aa - 1 == a[i - 1].aa && a[i].bb + a[i - 1].bb == 3) {
                if (a[i - 1].aa < 0) L = true;
                else if (a[i].aa > 0) R = true;
            }
        }
    }
    if (L && R || down && left && right) return 0;
    if (L && right && down || R && left && down) return 0;
    if (down && left || down && right || left && right) return 1;
    if (L && right || R && left || L && down || R && down) return 1;
    if (L && rr || R && ll) return 1;
    if (left && down && rr || right && down && ll) return 1;
    if (L || R || down || left || right || ll && rr) return 2;
    return 3;
}

C - 按闹分配

排序后,前缀和人等待的时间,二分查找鸡插队的时间点

int n, m;
ll t, q;
ll a[N];

bool check(ll x) {
    int l = upper_bound(a + 1, a + n + 1, x) - a;
    ll res = (n - l + 1) * t;
    return res <= q;
}

ll solve() {
    ll l = 0, r = a[n];
    while (l < r) {
        ll mid = (l + r) / 2;
        if (check(mid)) r = mid;
        else l = mid + 1;
    }
    return l + t;
}

int main() {
    FastIO
    cin >> n >> m >> t;
    for (int i = 1; i <= n; i ++) cin >> a[i];
    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i ++) a[i] += a[i - 1];
    while (m --) {
        cin >> q;
        cout << solve() << endl;
    }
    return 0;
}

D - 数组成鸡

参照验题人代码

int n, m;
int a[N];
set<int> st;

bool check(int x) {
    ll res = 1;
    for (int i = 0; i < n; i ++) {
        res *= a[i] + x;
        if (abs(res) > 1e9) return false;
    }
    st.insert(res);
    return true;
}

string solve() {
    int x; cin >> x;
    return st.count(x) ? yes : no;
}

int main() {
    FastIO
    cin >> n >> m;
    for (int i = 0; i < n; i ++) cin >> a[i];
    sort(a, a + n);
    st.insert(0);
    for (int i = 0; i < n; i ++) {
        if (i && a[i] == a[i - 1]) continue;
        for (int l = -a[i] - 1; check(l); l --);
        for (int r = -a[i] + 1; check(r); r ++);
    }
    while (m --) cout << solve() << endl;
    return 0;
}

E - 本题又主要考察了贪心

题为贪心误导人,暴力枚举情况,复杂度为 O ( T × 3 n ) ≤ 6 × 1 0 6 O(T\times 3^n)\le6\times 10^6 O(T×3n)6×106

int n, m, res;
int a[N], c[N];

void dfs(int d = 0) {
    if (d == m) {
        for (int i = 1; i <= n; i ++) c[i] = a[i];
        sort(c + 1, c + n + 1);
        int t = upper_bound(c + 1, c + n + 1, a[1]) - c - 1;
        t = n + 1 - t;
        res = min(res, t);
        return;
    }
    int u = b[d].aa, v = b[d].bb;
    a[u] += 3;
    dfs(d + 1);
    a[u] -= 3;
    a[v] += 3;
    dfs(d + 1);
    a[v] -= 3;
    a[u] ++, a[v] ++;
    dfs(d + 1);
    a[u] --, a[v] --;
}

int solve() {
    cin >> n >> m;
    for (int i = 1; i <= n; i ++) cin >> a[i];
    for (int i = 0; i < m; i ++) cin >> b[i].aa >> b[i].bb;
    res = n;
    dfs();
    return res;
}

F - 鸡数题!

第二类斯特林数

S ( n , m ) S(n,m) S(n,m) 表示的是把 n n n不同的小球放在 m m m相同的盒子里方案数,也记作 { n m } \begin{Bmatrix}n\\m\end{Bmatrix} {nm}

求法

  1. 递推 S ( n , m ) = S ( n − 1 , m − 1 ) + m S ( n − 1 , m ) S(n,m)=S(n−1,m−1)+mS(n−1,m) S(n,m)=S(n1,m1)+mS(n1,m)
  2. 容斥 S ( n , m ) = 1 m ! ∑ k = 0 m ( − 1 ) k C ( m , k ) ( m − k ) n S(n,m)=\frac1{m!}\sum_{k=0}^m(-1)^kC(m,k)(m-k)^n S(n,m)=m!1k=0m(1)kC(m,k)(mk)n

性质

n k = ∑ i = 0 k S ( k , i ) × i ! × C ( n , i ) n^k=\sum_{i=0}^kS(k,i)×i!×C(n,i) nk=i=0kS(k,i)×i!×C(n,i)

ll n, m;

int qpow(int a, int b) {
    int res = 1;
    while (b) {
        if (b & 1) res = (ll)res * a % mod;
        a = (ll)a * a % mod;
        b >>= 1;
    }
    return res;
}

int inv(int a) { return qpow(a, mod - 2); }

int solve() {
    cin >> n >> m;
    if (n < m) return 0;
    ll res = 0;
    vector<ll> fac(n + 1, 1), infac(n + 1, 1);
    for (int i = 1; i <= n; i ++)
        infac[i] = inv(fac[i] = fac[i - 1] * i % mod);
    for (int i = 2; i <= m; i ++) res = res * inv(i) % mod;
    for (int i = 0; i <= m; i ++) {
        ll t = qpow(m - i, n) * infac[i] % mod * infac[m - i] % mod;
        res = (res + mod + (i & 1 ? -1 : 1) * t) % mod;
    }
    return res;
}

G - why买外卖

前缀和即可

int n, m;
pii a[N];

ll solve() {
    cin >> n >> m;
    for (int i = 0; i < n; i ++) cin >> a[i].aa >> a[i].bb;
    sort(a, a + n);
    for (int i = 1; i < n; i ++) a[i].bb += a[i - 1].bb;
    for (int i = n - 1; i >= 0; i --)
        if (a[i].aa - m <= a[i].bb) return a[i].bb + m;
    return m;
}

H - 01背包,但是bit

参照官方题解:

记所选物品重量或起来是 c c c,枚举 m m m 里是 1 1 1 的位,让 c c c 里该位为 0 0 0,则该位将 m m m 分成了两部分:

  • 对于更高位,要求所选的物品这些位必须是 m m m 的子集(即 m m m 对应位是 1 1 1 才能选)
  • 对于更低位,可以全为 1 1 1,没有任何限制

因此,枚举 m m m 每一位作为这个分界,每个物品就变成了要么能选要么不能选,所以把能选的都选上就好

int n, m;
int v[N], w[N];

ll solve() {
    cin >> n >> m;
    for (int i = 0; i < n; i ++) cin >> v[i] >> w[i];
    ll res = 0;
    auto check = [&](int x) {
        ll ans = 0;
        for (int i = 0; i < n; i ++)
            if ((x & w[i]) == w[i]) ans += v[i];
        res = max(res, ans);
    };
    for (int i = 29; i >= 0; i --)
        if (m & 1 << i) check((m ^ 1 << i) | (1 << i) - 1);
    check(m);
    return res;
}

I - It’s bertrand paradox. Again!

概率分析,第一种方法是圆心概率一定 第二种是半径概率一定。因此第一个人的圆心位置概率更平均,答案不唯一,我大概意思一下,一发过了

int n, a, b;

string solve() {
    cin >> n;
    a = b = 0;
    while (n --) {
        int x, y, r; cin >> x >> y >> r;
        x = max(abs(x), abs(y));
        if (x <= 70) a ++;
        else b ++;
    }
    if (1.0 * a / b > 1.2) return bb;
    return aa;
}

L - 要有光

计算阴影部分面积即可

double solve() {
    double c, d, h, w; cin >> c >> d >> h >> w;
    return c * w * 3;
}

M - 牛客老粉才知道的秘密

int solve() {
    int n; cin >> n;
    int res = n / 6;
    return n % 6 ? res * 2 : res;
}

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

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

相关文章

go_view同后端集成时的注意事项

goview是一个不错的可视化大屏配置工具;提供了丰富的功能可供调用。 官方地址和文档: https://gitee.com/dromara/go-view https://www.mtruning.club/guide/start/ 同nodejs集成可参考;https://gitee.com/qwdingyu/led (建议–后端集成有api功能,可直接配置sql)同dotne…

1 初识JVM

JVM&#xff08;Java Virtual Machine&#xff09;&#xff0c;也就是 “Java虚拟机”。 对于第三点功能&#xff1a;即时编译 常见的JVM 默认安装在JDK中的虚拟机为HotSpot&#xff1a;可以用“java -version”进行查看

【tensorflow 版本 keras版本】

#. 安装tensorflow and keras&#xff0c; 总是遇到版本无法匹配的问题。 安装之前先查表 https://master--floydhub-docs.netlify.app/guides/environments/ 1.先确定你的python version 2.再根据下面表&#xff0c;确定安装的tesorflow, keras

Unity通过物理带动实现传输带运输物品

前言&#xff1a;遇到个听起来挺简单的需求&#xff0c;就是实现一个传输带&#xff0c;传输物品。但细想发现如果是直接设置物品的速度&#xff0c;或者通过设置父物体的方式带动物品&#xff0c;都挺不好&#xff0c;关联性太强。最后选择用到一个很实用的API, Rigidbody.M…

基于springboot的宠物店系统的设计与实现

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

Beyond Compare 30天试用到期的2024最新解决办法

目录 BeyondCompare&#xff1a;你的30天评估期已经结束 beyond Compare 3&#xff1a; 1)WinRun: regedit &#xff0c;打开注册表 2. 删除项⽬&#xff1a;计算机\HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare 3\CacheId beyond Compare 4&#xff1a; …

备战蓝桥杯---数据结构与STL应用(进阶4)

今天主要围绕并查集的一些今典题目展开&#xff1a; 在这里&#xff0c;我们把逻辑真的组合&#xff0c;用并查集即可。一开始&#xff0c;我觉得把a,b,c等价&#xff0c;把第一个赋a,接下来推即可&#xff0c;但这样在判断矛盾时还需要选择合适的点find&#xff0c;于是我们把…

【数据库】分区的优点和缺点

​ &#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;数据库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 优点&#xff1a; 缺点&#xff1a; 结语 我的其他博客 ​ 前言 数据库中的分区技术为处理大规模数据提供了一种有效的手段…

2024美赛预测算法 | 回归预测 | Matlab基于WOA-LSSVM鲸鱼算法优化最小二乘支持向量机的数据多输入单输出回归预测

2024美赛预测算法 | 回归预测 | Matlab基于WOA-LSSVM鲸鱼算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 2024美赛预测算法 | 回归预测 | Matlab基于WOA-LSSVM鲸鱼算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果…

Python||五城P.M.2.5数据分析与可视化_使用华夫图分析各个城市的情况(中)

目录 1.上海市的空气质量 2.成都市的空气质量 【沈阳市空气质量情况详见下期】 五城P.M.2.5数据分析与可视化——北京市、上海市、广州市、沈阳市、成都市&#xff0c;使用华夫图和柱状图分析各个城市的情况 1.上海市的空气质量 import numpy as np import pandas as pd impor…

【推荐】运放作为跟随器时,负反馈上加电阻的作用?

请问何种信号源或者输出是什么状况下跟随器需要使用电阻呢&#xff1f;使用多大阻值&#xff1f; 答&#xff1a;信号源内阻较大时&#xff0c;添加阻值与信号源内阻相同的反馈电阻&#xff0c;可以减少输出失调电压&#xff0c;提高精度。 R2的作用是为了防止输出意外接地&am…

机器学习 | 如何构建自己的决策树算法?

决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-else结构&#xff0c;最早的决策树就是利用这类结构分割数据的一种分类学习方法 目录 初识决策树 决策树原理 cart剪枝 特征提取 泰坦尼克号乘客生存预测(实操) 回归决策树 初识决策树 决策树是一种…

投资更好的管理会计系统,探索全面预算管理的奥秘

目前&#xff0c;我国财政体制正值如火如荼的调整阶段&#xff0c;各级政府和部门响应国家号召&#xff0c;旨在加强管理会计系统建设&#xff0c;制定具有先导性和科学性的现代化全面预算管理制度&#xff0c;从而将我国财力推向一个新高度。其中&#xff0c;基于服务或产品的…

从大模型到现在的 Agent的技术发展

引 一个乐观主义者的悲观估计 随着大规模模型技术的兴起&#xff0c;我们正处于一个崭新的智能时代的黎明。我们有一个大胆的预测&#xff0c;未来的5到10年将可能带来一场大变局&#xff1a;99%的开发、设计和文字工作将被AI接管。这不仅仅是一个想象&#xff0c;而是对未来可…

MacOS安装JDK+Maven+Idea插件+nvm等

Java安装环境(MacOS)JDKMavenIdea插件nvm等 背景&#xff1a;新机安装开发环境发现需要找很多文章&#xff0c;&#xff0c;&#xff0c;&#xff0c;这里一篇文章安装所有环境 文章目录 Java安装环境(MacOS)JDKMavenIdea插件nvm等一、安装JDK①&#xff1a;下载②&#xff1a;…

什么是udp协议

UDP协议&#xff08;User Datagram Protocol&#xff09;是一种在计算机网络中广泛使用的传输层协议。与TCP协议相比&#xff0c;UDP协议具有更轻量级、无连接和不可靠的特点。在本文中&#xff0c;我们将深入探讨UDP协议的工作原理、特点以及其在网络通信中的应用。 UDP报文分…

虹科技术丨一文详解IO-Link Wireless技术如何影响工业无线自动化

来源&#xff1a;虹科工业智能互联 虹科技术丨一文详解IO-Link Wireless技术如何影响工业无线自动化 原文链接&#xff1a;https://mp.weixin.qq.com/s/qVIkdeI5zzzagPd0UEkfDg 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; #工业自动化 #IO-Link Wireless #工业无…

Nicn的刷题日常之求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222

目录 1.题目描述 2.解题思路 3.解题 1.题目描述 求Snaaaaaaaaaaaaaaa的前5项之和&#xff0c;其中a是一个数字&#xff0c; 例如&#xff1a;222222222222222 2.解题思路 通过观察可以发现&#xff0c;该表达式的第i项中有i个a数字&#xff0c;因此&#xff1a; 假设第i…

k8s之安装部署及kuboard发布应用

目录 环境准备 系统规划 配置免密 将桥接的IPv4流量传递到iptables的链 系统基础配置 安装docker 安装docker及基础依赖 配置docker的仓库下载地址 部署k8s 添加阿里云的k8s源 安装kubeadm&#xff0c;kubelet和kubectl 初始化masteer节点 部署node节点 部署flanne…

【傻瓜式教程】docker运行facechain

首选&#xff0c;为了防止后期docker满&#xff0c;Docker容器 - 启动报错&#xff1a;No space left on device&#xff0c;更换一下docker存储位置 1、停止Docker服务 首先停止Docker守护进程&#xff0c;可以使用以下命令&#xff1a; sudo systemctl stop docker 备份现有…