科大XF提前批(改编题)-研发

💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历

👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸

✨ 笔试合集传送们 -> 🧷学长刷题笔记

🍒 本专栏已收集 140+ 套题 🍄 题面描述等均已改编,如果和你实际看到的题面描述不一样请理解,做法和题目本质基本不变。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞

本场题目难度不大,第一题是 签到题,第二题 找规律,第三题可以 猜结论

alt

🫐 01.LYA的咖啡店

问题描述

LYA开了一家深受欢迎的咖啡店。由于店铺规模有限,顾客需要排队等候。每位顾客的点单和制作时间不同,范围在 分钟之间。LYA想知道,作为第 位顾客,预计期望需要等待多长时间才能拿到自己的咖啡。

输入格式

输入一行,包含三个整数 ,分别表示顾客的位置、最短制作时间和最长制作时间。

输出格式

输出一个浮点数,表示预期等待时间。结果四舍五入保留到小数点后一位。

样例输入1

2 1 5

样例输出1

3.0

样例1说明

LYA是第 2 位顾客,前面只有 1 位顾客,该顾客的制作时间在 之间,平均等待时间为 3 分钟。

样例输入2

5 1 1

样例输出2

4.0

样例2说明

LYA是第 5 位顾客,前面有 4 位顾客,每位顾客的制作时间都是 1 分钟,需要等待 4 分钟。

样例输入3

5 1 2

样例输出3

6.0

样例3说明

LYA是第 5 位顾客,前面有 4 位顾客,每位顾客的制作时间在 之间,期望等待时间是 分钟。

样例输入4

6 1 2

样例输出4

7.5

样例4说明

LYA是第 6 位顾客,前面有 5 位顾客,每位顾客的制作时间在 之间,期望等待时间是 分钟。

数据范围

题解

这个问题可以通过计算期望值来解决。每位顾客的制作时间在 之间均匀分布,因此平均制作时间为

LYA作为第 位顾客,需要等待前 位顾客的制作完成。因此,总的期望等待时间为:

计算出这个值并保留一位小数即为答案。

参考代码

  • Python
n, x, y = map(int, input().split())
wait_time = (n - 1) * (x + y) / 2
print(f"{wait_time:.1f}")
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        int x = sc.nextInt();
        int y = sc.nextInt();
        double waitTime = (n - 1) * (x + y) / 2.0;
        System.out.printf("%.1f\n", waitTime);
    }
}
  • Cpp
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    long long n;
    int x, y;
    cin >> n >> x >> y;
    double wait_time = (n - 1) * (x + y) / 2.0;
    cout << fixed << setprecision(1) << wait_time << endl;
    return 0;
}

🎧 02.LYA的珠宝展示顺序

问题描述

LYA是一位珠宝设计师,她正在准备一场珠宝展。她有一系列独特的珠宝作品,每件都有其独特的价值。为了让展览更有趣,LYA决定按照特殊的顺序展示她的作品。她想按照以下规则来决定展示顺序:

  1. 首先选择价值居中的作品(如果作品数量为奇数)或两个中间价值的作品中较小的一个(如果作品数量为偶数)。
  2. 展示选中的作品,并将其从列表中移除。
  3. 重复步骤1和2,直到所有作品都被展示。

LYA想知道按照这个规则,她的珠宝作品会以什么顺序被展示。

输入格式

第一行包含一个正整数 ),表示珠宝作品的数量。 第二行包含 个正整数 ),表示每件珠宝作品的价值。

输出格式

输出一行,包含 个整数,表示珠宝作品展示的顺序。

样例输入

4
1 9 8 5

样例输出

5 8 1 9

样例说明

首先选择5(两个中间值中较小的一个),然后是8,接着是1,最后是9。

数据范围

题解

找规律+模拟。

  1. 首先对输入的价值序列进行排序。
  2. 使用两个指针,一个指向序列中间(偶数长度时指向中间偏左),另一个指向中间偏右。
  3. 交替输出左指针和右指针指向的元素,并向两端移动指针。

这种方法能够保证每次都选择当前剩余元素中的中位数或两个中间值中较小的一个。

时间复杂度:排序需要 ,输出需要 ,总体时间复杂度为 。 空间复杂度:,用于存储排序后的序列。

参考代码

  • Python
n = int(input())
a = list(map(int, input().split()))
a.sort()
l, r = (n-1)//2, n//2
result = []
while l >= 0 and r < n:
    if l == 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏短期内不再更新,请勿继续订阅

全部评论

相关推荐

宇算唯航:目测实缴资本不超100W的小公司
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 13:54
点赞 评论 收藏
分享
评论
3
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务