【算法训练营】最近点对,纸牌,青蛙(Python实现)

最近点对


描述

给定n个二维平面上的点,求距离最近的一对点,输出他们的距离。

输入

第一行包含一个正整数n。

接下来n行,每行包含两个整数x,y,表示一个点的坐标。

输出

输出距离最近的一对点的距离,保留两位小数。

样例1输入

10
7 9
-8 -1
-3 -1
1 4
-3 9
6 -4
7 5
6 6
-6 10
0 8

样例1输出

1.41

样例1解释

距离最近的点为7和8,距离为√(7−6)2+(5−6)2=√2≈1.41(7-6)2+(5-6)2=2≈1.41

样例2输入

点击下载

限制

对于70%的数据,2 ≤ n ≤ 2000,每个点坐标的绝对值不超过10^5;

对于100%的数据,2 ≤ n ≤ 3×10^5,每个点坐标的绝对值不超过10^9。

时间:10 sec

空间:512 MB

提示

[分治求最近点对。当然也可以用kdtree,虽然应该会超时。]

代码实现 

import sys
from math import sqrtdef distance(point1, point2):return sqrt((point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2)def closest_pair(points, l, r):if l == r:return sys.float_info.maxif r - l == 1:return distance(points[l], points[r])mid = (l + r) // 2dl = closest_pair(points, l, mid)dr = closest_pair(points, mid + 1, r)min_d = min(dl, dr)mid_points = []for i in range(l, r + 1):if abs(points[i][0] - points[mid][0]) < min_d:mid_points.append(points[i])mid_points.sort(key=lambda point: point[1])for i in range(len(mid_points)):for j in range(i + 1, len(mid_points)):if mid_points[j][1] - mid_points[i][1] >= min_d:breakmin_d = min(min_d, distance(mid_points[i], mid_points[j]))return min_ddef main():n = int(input())points = [(0, 0)] * nfor i in range(n):points[i] = tuple(map(int, input().split()))points.sort(key=lambda point: point[0])ans = closest_pair(points, 0, n - 1)print(f"{ans:.2f}")if __name__ == "__main__":main()

纸牌


时间限制:1 sec

空间限制:512 MB

问题描述

小明有 2n 张纸牌,点数依次从1 到 2n。小明要和你玩一个游戏,这个游戏中,每个人都会分到 n 张卡牌。游戏一共分为 n 轮,每轮你们都要出一张牌,点数小者获胜。

游戏开始了,你拿到了你的牌。你现在想知道,你最多(也就是运气最好的情况下)能够获胜几轮?

输入格式

第一行 1 个正整数 n。

第 2 行到第 n+1 行每行一个正整数 a[i],表示你的第 i 张牌的点数。

输出格式

一行一个整数表示你最多能够获胜的轮数。

样例输入

2
1
4

样例输出

1

数据范围

对于 31.25% 的数据,保证 1<=n<=100

对于 100% 的数据,保证 1<=n<=50,000

保证数据的合法性,即你即不会拿到重复的牌,又不会拿到超出点数范围的牌。

代码实现 

#include <bits/stdc++.h>
using namespace std;int main() {int n;int x, cnt = 0;scanf("%d", &n);int N = 2 * n + 1;int a[N], b[N];memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));for (int i = 1; i <= n; ++i) {scanf("%d", &x);a[x] = x;}for (int j = 1; j <= 2 * n; j++)if (a[j] == 0) {b[j] = j;}int index1 = 1, index2 = 1;for (; index1 <= 2 * n, index2 <= 2 * n;) {for (; a[index1] == 0 && index1 < 2 * n; ++index1);for (; b[index2] == 0 && index2 < 2 * n; ++index2);if (a[index1] < b[index2]) {++cnt;++index1;++index2;} else {++index2;}}printf("%d", cnt);return 0;
}

青蛙


题目名称:小青蛙

时间限制:5 sec

空间限制:256 MB

问题描述

一个坐标轴上有 n个荷叶,编号从 11 到 n。每片荷叶有一个坐标。

有一只可爱的小青蛙,它任选一片荷叶作为起点,并选择一个方向(左或右)然后开始跳。第一次跳跃时,他没有任何限制。从第二次跳跃开始,受到魔法的影响,他每次跳跃的距离都必须不小于前一次跳跃的距离,且跳跃方向必须与上一次跳跃保持一致。

每一片荷叶上都有一个数值。每次小青蛙跳到一片荷叶上时,他就会获得该荷叶对应的数值。特别地,他初始选择的荷叶的数值也是能得到的。

小青蛙可以在任意时刻选择停止跳跃。

可爱的小青蛙希望能获得尽可能大的数值总和。你能帮帮她吗?

输入格式

输出格式

一行一个整数,表示小青蛙能够获得的最大的数值总和。

样例输入

6
5 6
1 1
10 5
7 6
4 8
8 10

样例输出

25

数据范围

提示

本题时间限制较大,可以考虑一些效率一般的算法哦!

代码实现 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;const int MAX_LEAVES = 1005;
pair<int, int> leaves_coord[MAX_LEAVES];
int n;
int dp[MAX_LEAVES][MAX_LEAVES];int main() {cin >> n;// Read the coordinates of the leaves on the axisfor (int i = 1; i <= n; ++i) {int x, s;cin >> x >> s;leaves_coord[i] = make_pair(x, s);}int answer = 0;for (int round = 0; round < 2; ++round) {sort(leaves_coord + 1, leaves_coord + n + 1);for (int i = 1; i <= n; ++i) {dp[i][i] = leaves_coord[i].second;for (int j = 1; j < i; ++j) {dp[i][j] = 0;for (int k = j; k && 2 * leaves_coord[j].first <= leaves_coord[i].first + leaves_coord[k].first; --k)dp[i][j] = max(dp[i][j], dp[j][k]);answer = max(answer, (dp[i][j] += leaves_coord[i].second));}}// Reflect the leaves along the axis to continue using the sorting algorithmfor (int i = 1; i <= n; ++i)leaves_coord[i].first = -leaves_coord[i].first;}cout << answer << endl;return 0;
}

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

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

相关文章

阿里云-零基础入门推荐系统 【特征工程】

文章目录 赛题介绍评价方式理解赛题理解制作特征和标签&#xff0c; 转成监督学习问题导包df节省内存函数训练和验证集的划分获取历史点击和最后一次点击读取训练、验证及测试集读取召回列表读取各种Embedding读取文章信息读取数据对训练数据做负采样将召回数据转换成字典制作与…

194 基于matlab的日历GUI制作

基于matlab的日历GUI制作&#xff0c;可实时显示当前的日期和时间&#xff0c;精确到秒。非常漂亮&#xff0c;也很基础&#xff0c;学习GUI的不错程序&#xff0c;程序已调通&#xff0c;可直接运行。 194 matlab 日历制作 GUI可视化 - 小红书 (xiaohongshu.com)

JVM学习-垃圾回收专题

目录 1.如何判断对象可以回收 1.1引用计数法 1.2可达性分析算法 1.3五种引用 1.4拓展&#xff1a;直接内存 2.垃圾回收算法 2.1标记清除算法 2.2标记整理算法 2.3复制 3.分代垃圾回收 3.垃圾回收器 3.1串行垃圾回收器 3.2吞吐量优先垃圾回收器 3.3响应时间优先垃圾回收器…

Microsoft Word 符号 / 特殊符号

Microsoft Word 符号 / 特殊符号 1. 插入 -> 符号 -> 其他符号 -> Wingdings 2References 1. 插入 -> 符号 -> 其他符号 -> Wingdings 2 ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑抽水蓄能电站参与容量交易辅助服务的双层优化策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

c++算法学习笔记 (8) 树与图部分

1.树与图的存储 &#xff08;1&#xff09;邻接矩阵 &#xff08;2&#xff09;邻接表 // 链式前向星模板&#xff08;数组模拟&#xff09; #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N 100010, M …

npm下载慢换国内镜像地址

1 设置淘宝镜像地址 npm config set registry http://registry.npm.taobao.org 2 查看当前下载地址 npm config get registry 3 其它镜像地址列表&#xff1a; 1. 官方镜像&#xff1a;https://registry.npmjs.org/ 2. 淘宝镜像&#xff1a;https://registry.npm.taobao.o…

量子磁场测量“碰上”脑科学,未磁科技无创脑功能成像系统研发成功

从微观的神经元活动到宏观的认知行为&#xff0c;脑科学探索着人类最神秘、最复杂的领域之一。在这个过程中&#xff0c;科研人员、医生和创业者们扮演着至关重要的角色。他们不仅致力于揭示大脑的奥秘&#xff0c;更将科研成果转化为实际应用&#xff0c;推动脑科学领域的进步…

开发指南013-国际化-后台部分

平台底层做了国际化处理。开发时候根据项目性质&#xff0c;决定是否采用国际化&#xff0c;但是底层所需资源必须包含&#xff08;一些底层例如登录校验都做了对应处理&#xff09;。平台先支持中文简体、中文繁体、英文、日文&#xff0c;必要时可以随时扩展其他语言。 国际化…

Nginx高级技术: 代理缓存配置

一、缓存说明 Nginx缓存&#xff0c;Nginx 提供了一个强大的反向代理和 HTTP 服务器功能&#xff0c;同时也是一个高效的缓存服务器。一般情况下系统用到的缓存有以下三种&#xff1a; 1、服务端缓存&#xff1a;缓存存在后端服务器&#xff0c;如 redis。 2、代理缓存&#…

MySQL安装(Mac系统)

首先要删除本机原有的mysql 停止MySQL服务 sudo /usr/local/mysql/support-files/mysql.server stop不放心可以使用以下命令查询并杀死进程 ps aux | grep mysqld sudo kill <PID>再次尝试停止服务 sudo /usr/local/mysql/support-files/mysql.server stop卸载MySQL&…

R统计学3 - 数据分析入门问题41-60

往期R统计学文章: R统计学1 - 基础操作入门问题1-20 R统计学2 - 数据分析入门问题21-40 41. R 语言如何做双坐标图? # 创建模拟数据 year <- 2014:2024 gdp <- data.frame(year, GDP = sort(rnorm(11, 1000, 100))) ur <- data.frame(year, UR = rnorm(11, 5, 1…