题解:牛客小白月赛102(A - C)

A 序列中的排列

题意:

每次给你两个正整数 n , k n,k n,k ,并给你一段长度为 n n n 的序列。(所有输入均为小于等于100的正整数)
问:原序列中是否存在子序列,使得这个子序列是 k k k 的排列
子序列:某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。
排列:一个 k k k 的排列是一个长度为 k k k 的整数序列,其中包含了从 1 1 1 k k k 的每个数字,每个数字仅出现一次。

做法:

只要找到序列中是否存在 1 ∼ k 1 \sim k 1k 的每一个数即可
可以使用计数数组(数据范围也不大)

代码:

#include <iostream>
#include <algorithm>
#include <map>void solve() {int max = -1;int n,m,num,cnt = 0;std::cin >> n >> m;std::map<int,int> mp;for(int i = 0 ; i < n ; i ++) {std::cin >> num;if(num <= m && !mp.count(num)) cnt ++,max = std::max(max,num);;mp[num] ++;}std::cout << (max == m && cnt == m ? "YES\n" : "NO\n");
}signed main(){std::ios::sync_with_stdio(0);std::cin.tie(0);std::cout.tie(0);int t = 1;std::cin >> t;while(t--) solve();return 0;
}

B 连分数

题意:

(有点抽象,我直接放原文吧)

给定 a a a ,定义
x = a + 1 a + 1 a + 1 a + … x = a + \frac{1}{a+\frac{1}{a+\frac{1}{a+\dots}}} x=a+a+a+a+111

x x x 的值。

形式上说,设 f ( n ) = { a n = 1 a + 1 f ( n − 1 ) n > 1 f(n) = \left\{\begin{matrix} a & n=1\\ a+\frac {1}{f(n-1)} & n>1\end{matrix}\right. f(n)={aa+f(n1)1n=1n>1 x = lim ⁡ n → + ∞ f ( n ) x=\lim_{n \to + \infty}f(n) x=limn+f(n),求 x x x 的值。

a a a 是浮点数且是正实数,不超过 1 0 5 10^5 105 x x x 精确到小数点后 9 9 9 位)

做法1及其代码:

大家都学过极限,了解了极限的思想,那这题我们就好做了
首先,当 n n n 趋近于正无穷时, f ( n ) f(n) f(n) 一定趋近于某一个数,这样子才有一个解
正因如此,假设 f ( n ) f(n) f(n) 趋近于某一个数成立,那我们可以把 f ( n ) f(n) f(n) f ( n − 1 ) f(n-1) f(n1) 视作等价的(之间的差值忽略不计)

于是我们可以列出以下式子
x = a + 1 x x = a + \frac{1}{x} x=a+x1
移项得(易证 x x x 不等于 0 0 0):
x 2 − a x − 1 = 0 x^2 - ax - 1 = 0 x2ax1=0

于是我们只要找出这个 x x x 的近似解即可

如果我们会求根公式的话,就可以求根公式直接上了

#include <bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f3fvoid solve() {double a;std::cin >> a;printf("%.10f\n",(a +  sqrt(a*a + 4)) / 2);
}signed main(){std::ios::sync_with_stdio(0);std::cin.tie(0);int t = 1;std::cin >> t;while(t--) solve();return 0;
}

如果不会求根公式的话,也没关系。
不难看出, x x x 的值随着 a a a 的值递增而递增
于是我们可以进行实数二分
最小值设置个 1 1 1 就好了,最大值可以设置 100001 100001 100001(最后一个样例告诉我们不会超过这个数)

#include <bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f3fconst double eps = 1e-9;void solve() {double a;std::cin >> a;double l = 1,r = 1e5 + 1;while(fabs(l-r) >= eps) {double mid = (l + r) / 2;if(mid * mid - a * mid - 1 >= 0) r = mid;else l = mid;}printf("%.10f\n",l);
}signed main(){std::ios::sync_with_stdio(0);std::cin.tie(0);int t = 1;std::cin >> t;while(t--) solve();return 0;
}

做法2及其代码:

如果说,我没想到上面的思想,能不能模拟?
可以!
但是要做一点小运算
举个例子:

因为是第一个是 a a a
第二个不就是 a + 1 a a + \frac{1}{a} a+a1
你手动模拟下就发现
每一次的值都是:前面得到的分数分子分母互换,然后分子加上分母的 a a a

ok,然后我们直接写就可以了

#include <bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f3fconst double eps = 1e-9;void solve() {double a;std::cin >> a;double fz = a,fm = 1,c = fz / fm;std::swap(fz,fm);fz += fm*a;while(fabs(c - fz / fm) > 1e-10) {c = fz / fm;std::swap(fz,fm);fz += fm*a;}printf("%.10f\n",fz/fm);
}signed main(){std::ios::sync_with_stdio(0);std::cin.tie(0);int t = 1;std::cin >> t;while(t--) solve();return 0;
}

C sum

题意:

给你 n , s u m n,sum n,sum 和序列 a a a
已知有 n n n 个数 a i a_i ai ,你可以进行若干次修改操作,每一次操作任意修改一个数的值为 x ( − 1 0 4 ≤ x ≤ 1 0 4 ) x(-10^4 \le x \le 10^4) x(104x104)
问最少多少次操作使得这 n n n 个数的和为 s u m sum sum

做法:

很经典的贪心,总和比 s u m sum sum 大就把最大的尽可能变小,总和比 s u m sum sum 小就把最小的尽可能变大,直到跨越 s u m sum sum 为止。

代码:

#include <bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f3f
#define all(x) x.begin(),x.end()void solve() {int n,m,sum = 0,ans = 0;std::cin >> n >> m;std::vector<int> a(n);for(int i = 0 ; i < n ; i ++) std::cin >> a[i],sum += a[i];std::sort(all(a));if(sum == m) std::cout << 0 << "\n";else if(sum > m) {for(int i = n-1 ; i >= 0 ; i --) {ans ++;if(sum - (a[i] + 1e4) <= m) break;sum -= (a[i] + 1e4);}std::cout << ans << "\n";} else {for(int i = 0 ; i < n ; i ++) {ans ++;if(sum + (1e4 - a[i]) >= m) break;sum += (1e4 - a[i]);}std::cout << ans << "\n";}
}signed main(){std::ios::sync_with_stdio(0);std::cin.tie(0);int t = 1;std::cin >> t;while(t--) solve();return 0;
}

文章转载自博客https://www.cnblogs.com/jiejiejiang2004/p/18461306
博主已同意,我就是博主

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

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

相关文章

数据仓库中的维度建模:深入理解与案例分析

数据仓库中的维度建模&#xff1a;深入理解与案例分析 维度建模是数据仓库设计中最常用的一种方法&#xff0c;旨在简化数据访问、提高查询效率&#xff0c;特别适用于需要对数据进行多维分析的场景。本文将深入探讨维度建模的核心概念、设计步骤以及如何将其应用于实际案例中…

通过PyTorch 手写数字识别 入门神经网络 详细讲解

通过PyTorch 手写数字识别 入门神经网络 数据集 MNIST数据集中有手写数字图片7万张&#xff0c;划分训练集6万张&#xff0c;划分测试集1万张。 每张图片都会有一张标签&#xff0c;也就是代表着图片的真实值&#xff08;真实含义&#xff09;。 概念 计算机是如何读取图片的…

基于Android11简单分析audio_policy_configuration.xml

开篇先贴上一个高通的例子&#xff0c;后续基于此文件做具体分析。 1 <?xml version"1.0" encoding"UTF-8" standalone"yes"?> 2 <!-- Copyright (c) 2016-2019, The Linux Foundation. All rights reserved 3 Not a Contribut…

Python保存CSV文件,Excel打开后中文乱码

情况描述 在做多语言文件处理时&#xff0c; 使用 pandas&#xff0c; 并且指定了encoding为 UTF-8&#xff0c; 在 IDE&#xff0c; Sublime等编辑器上查看都显示正常&#xff0c;使用Excel打开非英文字符&#xff0c; 例如汉字&#xff0c; 阿拉伯文&#xff0c; 希伯来文等显…

多态常见面试问题

1、什么是多态&#xff1f; 多态&#xff08;Polymorphism&#xff09;是面向对象编程中的一个重要概念&#xff0c;它允许同一个接口表现出不同的行为。在C中&#xff0c;多态性主要通过虚函数来实现&#xff0c;分为编译时多态&#xff08;静态多态&#xff09;和运行时多态…

【Spring AI】Java实现类似langchain的第三方函数调用_原理与详细示例

Spring AI 介绍 &#xff1a;简化Java AI开发的统一接口解决方案 在过去&#xff0c;使用Java开发AI应用时面临的主要困境是没有统一且标准的封装库&#xff0c;导致开发者需要针对不同的AI服务提供商分别学习和对接各自的API&#xff0c;这增加了开发难度与迁移成本。而Sprin…

【数据结构】邻接表

一、概念 邻接表是一个顺序存储与链式存储相结合的数据结构&#xff0c;用于描述一个图中所有节点之间的关系。 若是一个稠密图&#xff0c;我们可以选择使用邻接矩阵&#xff1b;但当图较稀疏时&#xff0c;邻接矩阵就显得比较浪费空间了&#xff0c;此时我们就可以换成邻接…

机器人的应用 基于5G的变电站智慧管控系统

背景概述 一、电力行业面临的挑战与变革 随着全球工业化和信息化的快速发展&#xff0c;电力行业作为国民经济的基础性行业&#xff0c;其重要性日益凸显。然而&#xff0c;随着电力网络的不断扩展和复杂化&#xff0c;变电站和开关站作为电力传输与分配的关键节点&#xff0…

6、Spring Boot 3.x集成RabbitMQ动态交换机、队列

一、前言 本篇主要是围绕着 Spring Boot 3.x 与 RabbitMQ 的动态配置集成&#xff0c;比如动态新增 RabbitMQ 交换机、队列等操作。二、默认RabbitMQ中的exchange、queue动态新增及监听 1、新增RabbitMQ配置 RabbitMQConfig.java import org.springframework.amqp.rabbit.a…

Excel中Ctrl+e的用法

重点&#xff1a;想要使用ctrle&#xff0c;前提是整合或拆分后的结果放置的单元格必须和被提取信息的单元格相邻&#xff0c;且被提取信息的单元格也必须相连。 下图为错误示例 这样则可以使用ctrle 1、信息整合 2、提取信息 3、添加符号 4、信息顺序调换 5、数字提取 crtle还…

HarmonyOS NEXT 应用开发实战(三、ArkUI页面底部导航TabBar的实现)

在开发HarmonyOS NEXT应用时&#xff0c;TabBar是用户界面设计中不可或缺的一部分。本文将通过代码示例&#xff0c;带领大家一同实现一个常用的TabBar&#xff0c;涵盖三个主要的内容页&#xff1a;首页、知乎日报和我的页面。以模仿知乎日报的项目为背景驱动&#xff0c;设定…

解决ubuntu 下 VS code 无法打开点击没反应问题

从Ubuntu 22.04 升级到ubuntu 24.04 后&#xff0c;发现Vsode无法打开&#xff0c;不论是点击图标&#xff0c;还是terminator里面运行code 可执行程序&#xff0c;均没有反应。debug如下: 提示权限不够。 解决方案&#xff1a; sudo sysctl -w kernel.apparmor_restrict_unp…

C语言题目练习2

前面我们知道了单链表的结构及其一些数据操作&#xff0c;今天我们来看看有关于单链表的题目~ 移除链表元素 移除链表元素&#xff1a; https://leetcode.cn/problems/remove-linked-list-elements/description/ 这个题目要求我们删除链表中是指定数据的结点&#xff0c;最终返…

C语言 | Leetcode C语言题解之第460题LFU缓存

题目&#xff1a; 题解&#xff1a; /* 数值链表的节点定义。 */ typedef struct ValueListNode_s {int key;int value;int counter;struct ValueListNode_s *prev;struct ValueListNode_s *next; } ValueListNode;/* 计数链表的节点定义。 其中&#xff0c;head是数值链表的头…

腾讯云Android 与 iOS 相关

移动端&#xff08;Android/iOS&#xff09;支持哪几种系统音量模式&#xff1f; 支持2种系统音量类型&#xff0c;即通话音量类型和媒体音量类型&#xff1a; 通话音量&#xff1a;手机专门为通话场景设计的音量类型&#xff0c;使用手机自带的回声抵消功能&#xff0c;音质…

java使用socket模拟咖啡馆场景,客户与服务器多线程交互场景

java使用socket模拟咖啡馆场景,客户与服务器多线程交互场景 任务的目标是使用客户机 - 服务器架构构建一个“虚拟咖啡馆”系统每个客户端应用程序将扮演 Customer 谁想点茶或咖啡。服务器应用程序将扮演咖啡馆虚拟的角色 Barista 负责处理订单&#xff0c;准备茶和啡&#xff…

OpenCV-风格迁移

文章目录 一、原理二、关键步骤三、实现方法四、可选参数五、示例代码六、总结 OpenCV中的风格迁移是一种计算机视觉技术&#xff0c;它允许用户将一种图像的风格转移到另一幅图像上&#xff0c;从而创造出具有独特美学效果的新图像。这种技术在艺术、设计和娱乐等领域有着广泛…

elementui中table标题和内容插槽

代码 <template> <el-table :data"tableData"> <el-table-column> <template slot"header" slot-scope"scope"> <el-tooltip content"这是列的提示信息" placement"top"> <span>…

谷歌浏览器 文件下载提示网络错误

情况描述&#xff1a; 谷歌版本&#xff1a;129.0.6668.90 (正式版本) &#xff08;64 位&#xff09; (cohort: Control)其他浏览器&#xff0c;比如火狐没有问题&#xff0c;但是谷歌会下载失败&#xff0c;故推断为谷歌浏览器导致的问题小文件比如1、2M会成功&#xff0c;大…

【LeetCode】动态规划—95. 不同的二叉搜索树 II(附完整Python/C++代码)

动态规划—95. 不同的二叉搜索树 II 题目描述前言基本思路1. 问题定义二叉搜索树的性质&#xff1a; 2. 理解问题和递推关系递归构造思想&#xff1a;状态定义&#xff1a;递推公式&#xff1a;终止条件&#xff1a; 3. 解决方法递归 动态规划方法&#xff1a;伪代码&#xff…