牛客练习赛(下)

Cidoai的平均数对

题目描述

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

运行代码

#include <iostream>
#include <vector>
using namespace std;
int main() {int n, k;cin >> n >> k;int totalAns = 0;int rSum = 0;vector<int> ex, weights;for (int i = 0; i < n; ++i) {int a, b;std::cin >> a >> b;if (b <= k) {totalAns += a;rSum += k - b;} else {ex.push_back(b - k);weights.push_back(a);}}vector<int> f(rSum + 1, 0);for (int i = 0; i < ex.size(); ++i) {for (int j = rSum; j >= ex[i]; --j) {f[j] = std::max(f[j], f[j - ex[i]] + weights[i]);}}cout << f[rSum] + totalAns;return 0;
}

代码思路

一、整体思路

  1. 输入部分:通过 cin >> n >> k; 读取输入的整数 n 和 k,分别表示对数的数量和参数 k 的值。接着使用一个循环读取 n 对数 (a_i, b_i)

  2. 计算部分:遍历每一对数,如果 b_i 小于等于 k,则将 a_i 累加到 totalAns 中,并将 k - b_i 累加到 rSum 中。如果 b_i 大于 k,则将 b_i - k 存入 ex 向量中,将 a_i 存入 weights 向量中。

  3. 动态规划部分:创建一个长度为 rSum + 1 的向量 f,并初始化为全零。使用两层循环进行动态规划,外层循环遍历 ex 向量,内层循环从 rSum 到当前的 ex[i] 进行逆序遍历。在每次循环中,更新 f[j] 为 f[j] 和 f[j - ex[i]] + weights[i] 的较大值。

  4. 输出部分:最后输出 f[rSum] + totalAns,即满足条件的 a_i 的最大和。

二、原理分析

  1. 问题理解:问题要求在给定的 n 对数中选出一些对,使得这些对中 b_i 的平均值不超过 k,同时 a_i 的和最大。

  2. 处理特殊情况:对于那些 b_i 已经小于等于 k 的对数,直接将它们的 a_i 累加到 totalAns 中,因为这些对数已经满足条件,无需进一步处理。

  3. 动态规划求解:对于那些 b_i 大于 k 的对数,使用动态规划来求解。将问题转化为一个背包问题,背包的容量为 rSum(即超出 k 的部分的总和),物品的重量为 ex[i](即每个超出 k 的 b_i 减去 k 的值),物品的价值为 weights[i](即对应的 a_i)。通过动态规划求解在不超过背包容量的情况下,能获得的最大价值,即这些对数中 a_i 的最大和。

  4. 最终结果:最终的结果是已经满足条件的对数的 a_i 之和 totalAns 加上通过动态规划求解得到的超出部分的最大 a_i 之和 f[rSum]

Cidoai的树上方案

题目描述

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

运行代码

#include <iostream>
#include <vector>const int mod = 998244353;using namespace std;void dfs(int u, const vector<vector<int>>& adj, vector<vector<int>>& f) {f[u][0] = f[u][1] = 1;for (int v : adj[u]) {dfs(v, adj, f);f[u][0] = (1LL * f[u][0] * ((f[v][0] + f[v][1]) % mod)) % mod;f[u][1] = (1LL * f[u][1] * f[v][0]) % mod;}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;vector<vector<int>> adj(n + 1);vector<vector<int>> f(n + 1, vector<int>(2));for (int i = 2, p; i <= n; ++i) {cin >> p;adj[p].push_back(i);}dfs(1, adj, f);cout << (f[1][0] + f[1][1]) % mod;return 0;
}

代码思路

一、整体思路

该代码的目的是解决在给定的有根树中,从树外引入一个点向树内任意连边,使得构成的简单图不含三元环的方案数问题。通过深度优先搜索(DFS)遍历树,并使用动态规划的思想计算每个节点的两种状态的方案数,最终得到根节点的总方案数。

二、具体步骤

  1. 输入部分:通过 cin >> n; 读取树的节点数量 n。使用一个循环读取每个节点的父亲节点编号,构建树的邻接表 adj

  2. 准备工作:创建两个二维向量 adj 和 fadj 用于存储树的邻接关系,f 用于存储每个节点的两种状态的方案数(f[u][0] 表示不与子节点相连的方案数,f[u][1] 表示与子节点相连的方案数)。

  3. 深度优先搜索(DFS)

    • dfs 函数用于遍历树,计算每个节点的方案数。
    • 对于每个节点 u,初始时 f[u][0] = f[u][1] = 1,表示当前节点自身的两种初始状态都有 1 种方案。
    • 对于每个子节点 v,递归调用 dfs(v, adj, f) 计算子节点的方案数。
    • 然后根据子节点的方案数更新当前节点的方案数。f[u][0] = (1LL * f[u][0] * ((f[v][0] + f[v][1]) % mod)) % mod; 表示当前节点不与子节点相连时,方案数为自身不相连的方案数乘以子节点不相连和相连的方案数之和,再取模。f[u][1] = (1LL * f[u][1] * f[v][0]) % mod; 表示当前节点与子节点相连时,方案数为自身相连的方案数乘以子节点不相连的方案数,再取模。
  4. 输出结果:在 main 函数中,调用 dfs(1, adj, f) 从根节点开始进行深度优先搜索,计算所有节点的方案数。最后,输出根节点的总方案数 (f[1][0] + f[1][1]) % mod

三、原理分析

  • 通过 DFS 遍历树,可以确保每个节点的方案数都能根据其子节点的方案数正确计算。
  • 动态规划的状态定义和转移方程能够准确地计算出每个节点在不同状态下的方案数,从而最终得到根节点的总方案数。
  • 取模操作 % mod 是为了保证结果在规定的模数范围内,避免数值过大。

Cidoai的字符集合

题目描述

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

运行代码

#include<iostream>
#define int long long
#define endl '\n';
using namespace std;
const int N=1e6+10;
bool he[N];
void solve(){map<string,int>xx;int n;cin>>n;for(int i=1;i<=n;i++){int k;cin>>k;for(int j=1;j<=k;j++){string p;cin>>p;if(xx[p]==0||xx[p]==i){xx[p]=i;}else {he[i]=1;he[xx[p]]=1;}}}int sum=1;for(int i=1;i<=n;i++){if(!he[i])sum++;}if(sum>n)sum=n;cout<<sum;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T=1;while(T--){solve();}
}

代码思路

一、整体思路

  1. 首先读取输入的歌曲数量 n
  2. 对于每一首歌曲,读取其旋律长度 k 和各个旋律字符串。将旋律字符串作为键,歌曲编号作为值存入 map<string, int> xx 中。如果当前旋律字符串已经在 xx 中且值为当前歌曲编号或者为初始值 0,则更新其值为当前歌曲编号;如果当前旋律字符串在 xx 中且值不为当前歌曲编号,说明找到了两首有相同旋律的歌曲,将这两首歌曲对应的标记位 he[i] 和 he[xx[p]] 置为 1
  3. 遍历所有歌曲,统计标记位为 0 的歌曲数量,即没有与其他歌曲有相同旋律的歌曲数量,记为 sum。如果 sum 大于歌曲总数 n,则 sum 更新为 n
  4. 最后输出 sum,即最少可以划分成的集合数量。

二、关键步骤原理

  1. 使用 map<string, int> xx

    • map 是一种关联容器,它以键值对的形式存储数据。在这里,键是旋律字符串,值是歌曲编号。通过这种方式,可以快速查找某个旋律是否已经出现过,以及是在哪一首歌曲中出现的。
    • 当遍历一首歌曲的旋律时,如果某个旋律字符串已经在 map 中,并且值与当前歌曲编号相同或者为初始值 0,说明这个旋律是首次在当前歌曲中出现或者之前也在当前歌曲中出现过,此时更新 xx[p] 为当前歌曲编号。如果值不为当前歌曲编号,说明这个旋律在另一首歌曲中也出现过,找到了相似的两首歌曲,将它们的标记位置为 1
  2. 标记位 he[i]

    • 定义了一个布尔型数组 he[N],用于标记每一首歌曲是否与其他歌曲有相同的旋律。当找到两首有相同旋律的歌曲时,将它们对应的标记位置为 1
    • 最后遍历这个标记数组,统计标记位为 0 的歌曲数量,这些歌曲是没有与其他歌曲有相同旋律的,可以单独作为一个集合。而有相同旋律的歌曲会被归为一个集合。
  3. sum 的计算:

    • sum 初始值为 1,表示至少有一个集合。在遍历歌曲过程中,每找到一首没有与其他歌曲有相同旋律的歌曲,就将 sum 加一。
    • 最后,如果 sum 大于歌曲总数 n,说明所有歌曲都有相同旋律,此时将 sum 更新为 n,即所有歌曲都在一个集合中。

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

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

相关文章

情感AI:科技赋能情感计算的新时代

一、引言 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;情感AI&#xff08;Affective AI&#xff09;成为了人工智能领域中的一大热门话题。情感AI&#xff0c;或称情感计算&#xff08;Affective Computing&#xff09;&#xff0c;指的是通过计算机技术…

buildroot移植qt报错Info: creating stash file (补充qt添加字库)

移植qt库&#xff0c;编译文件报错Info: creating stash file /home/rbing/QT/uart/.qmake.stash Project ERROR: Unknown module(s) in QT: serialport rbingouc:~/QT/uart$ /home/rbing/linux/tool/buildroot-2022.02.9/output/host/usr/bin/qmake Info: creating stash fil…

Redis——常用数据类型hash

目录 hash常用命令hsethgethdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhdecrby 哈希的编码方式哈希的应用 hash 常用命令 hset HSET key field value [field value ...]//时间复杂度O(1) //返回值&#xff1a;设置成功的键值对的个数hget HGET key field//hdel HDEL key…

统计/nginx/access.log中每个日志的访问次数,按高到低排列

/nginx/access.log具体内容长这样&#xff1a; 第一个元素就是ip。 awk {print $1} /nginx/access.log | sort | uniq -c | sort -r首先&#xff0c;awk {print $1} /nginx/access.log 从 /nginx/access.log文件的每行中提取出第一个字段。然后&#xff0c;sort 对提取出的第…

【linux-Day3】linux下的基本指令

【linux-Day3】linux下的基本指令 linux下的基本指令&#x1f4e2;man&#xff1a;访问linux手册页&#x1f4e2;echo&#xff1a;把字符串写入指定文件中&#x1f4e2;cat&#xff1a;查看目标文件的内容&#x1f4e2;cp&#xff1a;复制文件或目录&#x1f4e2;mv&#xff1a…

移动剧院:便携与声学结合的创新空间—轻空间

随着现代文化和娱乐需求的多样化&#xff0c;传统剧院形式已经无法完全满足人们的需求。作为创新型建筑解决方案的代表&#xff0c;移动剧院凭借其独特的便携性和卓越的声学效果&#xff0c;成为了各类文化活动、音乐会、戏剧表演等活动的理想场所。 高效搭建&#xff0c;便捷移…

开源链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序:重塑私域微商新生态

摘要&#xff1a;本文深入探讨在私域环境下&#xff0c;微商借助微信平台获客成本近乎白菜价的现象。分析微信发展带来的市场蓝海以及微商作为开荒者的机遇与挑战。引入开源链动 21 模式、AI 智能名片和 S2B2C 商城小程序&#xff0c;阐述其如何为微商带来新的发展机遇&#xf…

SQL server 6.5升级到SQL server 2019的方法

背景&#xff1a; 对日项目&#xff0c;客户的旧系统的数据库用的是SQL server 6.5&#xff0c;操作系统是windows NT。新系统要求升级到SQL server 2019&#xff0c;查了下资料发现旧系统的版本实在是太久远了&#xff0c;90年代的。 数据库部分的升级思路是这样的&#xff…

55页可编辑PPT | 集团制造企业数字化转型顶层设计方案

这份PPT文档是一份关于集团制造企业数字化转型的顶层业务设计方案。文档详细介绍了企业在后ERP时代面临的挑战&#xff0c;以及如何通过Oracle解决方案来实现数字化转型。 数字化转型的三大要点集中在满足利益相关者的期望&#xff0c;以企业价值为核心引领业务模式的创新&…

SpringBoot整合JDBCTemplate(day34)

1 学习目标 了解JDBCTemplate重点掌握JDBCTemplate常用方法重点掌握SpringBoot项目整个JDBCTemplate重点掌握JDBCTemplate的CRUD操作 2 JDBCTemplate介绍 JDBCTemplate是Spring官方提供的&#xff0c;基于jdbc技术访问数据库的一个API对象。此对象基于模板方法模式&#xff…

无人机应用新纪元:图形工作站配置推荐与硬件解析

低空经济作为国家新兴的战略性产业&#xff0c;正逐步成为经济高质量发展的新动力。据统计&#xff0c;2023年中国低空经济规模达到5059.5亿元&#xff0c;增速为33.8%&#xff0c;预计到2026年有望突破万亿元大关。政府对低空经济的发展高度重视&#xff0c;不仅出台了相关法规…

机器学习特征构建与特征筛选

前言 上一篇文章讲述了原始特征分析和处理&#xff0c;保障后续拿到的是干净的特征变量&#xff0c;但实际这些特征对于建模不一定是有效的&#xff0c;所以需要在原始特征的基础上&#xff0c;结合业务场景做特征变量的衍生&#xff0c;提升数据的表达能力。此外&#xff0c;…

【devops】devops-git之git分支与标签使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

RNN基本介绍

RNN输入和输出不是向量的时候&#xff0c;需要进行向量化。

中国书法—孙溟㠭浅析碑帖《石门颂》

中国书法——孙溟㠭浅析碑帖《石门颂》 《石门颂》是东汉时期的摩崖刻石&#xff0c;属隶属体&#xff0c;全称是《故司隶校尉犍为杨君颂》&#xff0c;建和二年《公元148年》摹刻&#xff0c;记载的内容是杨孟文主持修复褒斜栈道的事迹&#xff0c;因为刻在陕西褒城北石门崖壁…

如何建立一个Webservice WSDL的简单例子(完整例子)

一:根据对方给的wsdl 的接口地址创建Web 的逻辑端口 1:例如这个用C#写的Web 2.我们需要在SAP里建立一个Service Consumers 的服务记得后缀要加?wsdl 2:然后就会生成对应方法的出参 入参 返回的消息根据接口方法来判断 二:如何通过LPCONFIG建立逻辑端口或者通过SOAMANAGER…

系统架构设计师 - 项目管理

项目管理 项目管理&#xff08;1-3分&#xff0c;案例分析 25分&#xff09;立项管理 ★盈亏平衡分析 范围管理 ★★时间管理 ★★★★概述前导图法 PDM(单代号网络图)箭线图法 ADM(双代号网络图) 了解关键路径法总时差自由时差 甘特图 成本管理 ★挣值管理概述指数计算 软件质…

actuator字符绕过漏洞在Nginx上的配置

最近遇到了安全部门派发的actuator泄漏漏洞&#xff0c;领导希望不暴露到外网上&#xff0c;对于内网需要认证才可以访问。 要想不暴露到外网上&#xff0c;就需要在网络层面做拦截&#xff0c;比如nginx和apisix上做代理配置。 URI字符绕过的风险背景知识: URI字符绕过是一种安…

Day97 代码随想录打卡|动态规划篇--- 整数拆分

题目&#xff08;leecode T343&#xff09;&#xff1a; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 方法&#xff1a; 本题感觉属于有些难度的动态…