当前位置: 首页 > backend >正文

笔试——Day43

文章目录

  • 第一题
    • 题目
    • 思路
    • 代码
  • 第二题
    • 题目
    • 思路 1
    • 代码1
    • 思路2
    • 代码2
  • 第三题
    • 题目
    • 思路
    • 代码

第一题

题目

kotori和抽卡(二)

在这里插入图片描述

思路

数学: 二项分布C(n, m) * p ^ n * (1 - p) ^ m

代码

#include<iostream>
using namespace std;int n, m;int main()
{cin >> n >> m;double res = 1.0;for(int i = n; i >= n - m + 1; i--) res *= i;for(int i = m; i >= 1; i--) res /= i;for(int i = 0; i < m; i++) res *= 0.8;for(int i = 0; i < n - m; i ++) res *= 0.2;printf("%.4f\n", res);return 0;
}

第二题

题目

ruby和薯条

在这里插入图片描述

思路 1

  • 排序数组:首先对数组进行排序
  • 遍历每个元素作为基准:对于每个元素a[i],寻找所有满足条件的a[j]
  • 使用二分查找确定范围
    • 找到第一个 ≥ a[i] + l 的位置(左边界)
    • 找到第一个 > a[i] + r 的位置(右边界)
  • 统计对数:两个边界之间的元素个数就是满足条件的对数

代码1

#include<iostream>
#include<algorithm>
using namespace std;const int N = 200010;int n, l, r;
int a[N];int main() {cin >> n >> l >> r;for (int i = 0; i < n; i++) cin >> a[i];sort(a, a + n);long long res = 0;for (int i = 0; i < n - 1; i++) {int left_bound = a[i] + l;int right_bound = a[i] + r;// 找到第一个大于等于left_bound的位置int j = lower_bound(a + i + 1, a + n, left_bound) - a;// 找到第一个大于right_bound的位置int k = upper_bound(a + i + 1, a + n, right_bound) - a;res += (k - j);}cout << res << endl;return 0;
}

思路2

  • [l, r]之间⼀共有多少对等价于[0,r] - [0, l -1]有多少对
  • 利用滑动窗口解决[0, x]有多少对;

代码2

#include<iostream>
#include<algorithm>
using namespace std;const int N = 200010;int n, l, r;
int a[N];// 找出差值在 [0, x] 之间⼀共有多少对
long long solve(int x)
{long long res = 0;int left = 0, right = 0;while(right < n){while((a[right] - a[left]) > x) left++;res += right - left;right++;}return res;
}int main() 
{cin >> n >> l >> r;for (int i = 0; i < n; i++) cin >> a[i];sort(a, a + n);cout << solve(r) - solve(l - 1) << endl;return 0;
}

第三题

题目

循环汉诺塔

在这里插入图片描述

思路

模拟找规律

代码

#include <iostream>
using namespace std;const int MOD = 1000000007;int n;int main() 
{cin >> n;int x = 1, y = 2;for(int i = 2; i <= n; i++){int xx = 2 * y % MOD + 1;int yy = (2 * y % MOD + 2 + x) % MOD;x = xx;y = yy;}cout << x << " " << y << endl;return 0;
}
// 64 位输出请用 printf("%lld")
http://www.xdnf.cn/news/18187.html

相关文章:

  • HJ4 字符串分隔
  • C++高频知识点(二十七)
  • CentOS安装SNMPWalk
  • 无畏契约手游上线!手机远控模拟器畅玩、抢先注册稀有ID!
  • Linux的基本操作
  • 遥感amp;机器学习入门实战教程 | Sklearn 案例③:PCA + SVM / 随机森林 对比与调参
  • LAMP架构编译安装部署
  • 垂直领域大模型构建:法律行业“类ChatGPT”系统的训练与落地
  • PythonDay31
  • Vue2+Vue3前端开发_Day1
  • Fragment重要知识点总结
  • Incredibuild 新增 Unity 支持:击破构建时间过长的痛点
  • 机器学习(决策树2)
  • MVVM开源项目
  • Netty处理粘包与拆包
  • vue使用vue-cropper实现图片裁剪之单图裁剪
  • 关于mybatis表关联查询和mybatis-Plus单表查询传入时间查询数据(走索引)
  • Linux Namespace 隔离的“暗面”——故障排查、认知误区与演进蓝图
  • CVPR 2025 | 具身智能 | HOLODECK:一句话召唤3D世界,智能体的“元宇宙练功房”来了
  • 【HTML】3D动态凯旋门
  • 通过C#上位机串口写入和读取浮点数到stm32的片内flash实战4(通过串口下发AD9833设置值并在上位机显示波形曲线)
  • “你不干有的是AI干”,提示词中的“情感化提示”
  • 如何在 Ubuntu Linux 上安装 RPM 软件包
  • 【SQL优化案例】统计信息缺失
  • Vercel v0 iOS版重磅发布:AI驱动的移动开发新篇章
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘paramiko’问题
  • C++入门自学Day14-- Stack和Queue的自实现(适配器)
  • Java高级面试实战:Spring Boot微服务与Redis缓存整合案例解析
  • “R语言+遥感”的水环境综合评价方法实践技术应用
  • Centos7物理安装 Redis8.2.0