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

OD C卷 - 多线段数据压缩

多段 线 数据压缩 (200)

  • 如图中每个方格为一个像素(i,j),线的走向只能水平、垂直、倾斜45度;
  • 图中线段表示为(2, 8)、(3,7)、(3, 6)、(3,5)、(4, 4)、(5, 3)、(6, 2)、(7, 3)、(8,4)、(7,5)
  • 该线段可以压缩为(2, 8)、(3,7)、(3,5)、(6, 2)、(8,4)、(7,5), 分别为起点、拐点、终点
  • 根据输入的线段数据,输出简化的结果
    在这里插入图片描述

输入描述:
2 8 3 7 3 6 3 5 4 4 5 3 6 2 7 3 8 4 7 5
每两个一组(i, j) i,j 范围为【0,64】
输入至少包含两个坐标点
输出描述:
2 8 3 7 3 5 6 2 8 4 7 5

思路:

  • 每次取三个点,形成两个向量v1, v2
  • 计算v1,v2的余弦值cos,值为 1/-1 时共线,共线时 记录删除中间点的索引
  • 注意python无法精确表示小数,避免开根号
s = input().strip()
n = len(s)# 字符串转为点
points = []
remove_points = []
for i in range(0, n, 4):points.append(list(map(int, s[i:i+4].strip().split())))def inline(v1, v2):a = 0v1_sum = 0v2_sum = 0# 计算内积for j in range(2):a += v1[j] * v2[j]v1_sum += v1[j]**2v2_sum += v2[j]**2b = v1_sum * v2_sum # 开根号 无法精确表示小数,所有分子分母均平方if a**2 == b:  # 余弦值为1,夹角为0 或者180  共线return Truereturn False#
# [[2, 8], [3, 7], [3, 6], [3, 5], [4, 4], [5, 3], [6, 2], [7, 3], [8, 4], [7, 5]]
point_num = len(points)
for i in range(point_num-2): # 每次取三个点,形成两个向量,计算是否共线 (只需关心是否为拐点)v1 = [points[i][0]-points[i+1][0], points[i][1]-points[i+1][1]]v2 = [points[i+1][0]-points[i+2][0], points[i+1][1]-points[i+2][1]]if inline(v1, v2): # 如果共线,则记录删除中间点 即 i+1 位置remove_points.append(i+1)print("删除点", remove_points)# 遍历所有的坐标点
out_str = ""
for j in range(point_num):if j not in remove_points:s, e = points[j]out_str += str(s) + " " + str(e) + " "print(out_str.strip())

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【PCA提取主要特征通俗】
  • Unity 功能 之 创建 【Unity Package】 Manager 自定义管理的包使用配置URL,使用 git URL加载的简单整理
  • Java SpringBoot 集成 MinIO 资料
  • RabbitMq架构原理剖析及应用
  • 【PostgreSQL教程】PostgreSQL UPDATE 语句
  • 数据库的基础的exists
  • java中字面量和golang中字面量区别
  • 掌握Java并发编程基础
  • 计算机网络(网络层)
  • 基于RFID技术的智能压缩机装配线优化方案
  • 2024年有哪些好用的文件加密软件?十款常用加密软件推荐
  • Docker 环境下使用 Traefik v3 和 MinIO 快速搭建私有化对象存储服务
  • Ubuntu 22.04 Docker安装笔记
  • python3 pyside6图形库学习笔记及实践(四)
  • 社交巨头与去中心化:解析Facebook在区块链的角色
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Java方法详解
  • JDK 6和JDK 7中的substring()方法
  • js正则,这点儿就够用了
  • mysql中InnoDB引擎中页的概念
  • Odoo domain写法及运用
  • PHP变量
  • SpingCloudBus整合RabbitMQ
  • storm drpc实例
  • 彻底搞懂浏览器Event-loop
  • 构建二叉树进行数值数组的去重及优化
  • 设计模式走一遍---观察者模式
  • 我感觉这是史上最牛的防sql注入方法类
  • 延迟脚本的方式
  • 一文看透浏览器架构
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (2015)JS ES6 必知的十个 特性
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (南京观海微电子)——COF介绍
  • ***监测系统的构建(chkrootkit )
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .netcore 获取appsettings
  • .Net程序帮助文档制作
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @Value读取properties中文乱码解决方案