【CSP】202309-2_坐标变换(其二)Python实现

2023-12-06 11:44

本文主要是介绍【CSP】202309-2_坐标变换(其二)Python实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • @[toc]
      • 试题编号
      • 试题名称
      • 时间限制
      • 内存限制
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 样例说明
      • 评测用例规模与约定
      • 评分方式
      • 提示
      • `Python`实现

试题编号

202309-2

试题名称

坐标变换(其二)

时间限制

2.0s

内存限制

512.0MB

问题描述

  • 对于平面直角坐标系上的坐标 ( x , y ) (x , y) (x,y),小 P P P定义了如下两种操作

    • 拉伸 k k k倍:横坐标 x x x变为 k x kx kx,纵坐标 y y y变为 k y ky ky
    • 旋转 θ \theta θ:将坐标 ( x , y ) (x , y) (x,y)绕坐标原点 ( 0 , 0 ) (0 , 0) (0,0)逆时针旋转 θ \theta θ弧度 ( 0 ≤ θ < 2 π ) (0 \leq \theta < 2 \pi) (0θ<2π),易知旋转后的横坐标为 x cos ⁡ θ − y sin ⁡ θ x \cos{\theta} - y \sin{\theta} xcosθysinθ,纵坐标为 x sin ⁡ θ + y cos ⁡ θ x \sin{\theta} + y \cos{\theta} xsinθ+ycosθ
  • 设定好了包含 n n n个操作的序列 ( t 1 , t 2 , ⋯ , t n ) (t_{1} , t_{2} , \cdots , t_{n}) (t1,t2,,tn)后,小 P P P又定义了如下查询

    • i j x y i \ j \ x \ y i j x y:坐标 ( x , y ) (x , y) (x,y)经过操作 t i , ⋯ , t j ( 1 ≤ i ≤ j ≤ n ) t_{i} , \cdots , t_{j} (1 \leq i \leq j \leq n) ti,,tj(1ijn)后的新坐标
  • 对于给定的操作序列,试计算 m m m个查询的结果


输入格式

  • 从标准输入读入数据
  • 输入共 n + m + 1 n + m + 1 n+m+1
  • 输入的第一行包含空格分隔的两个正整数 n n n m m m,分别表示操作和查询个数
  • 接下来 n n n行依次输入 n n n个操作,每行包含空格分隔的一个整数(操作类型)和一个实数( k k k θ \theta θ),形如 1 k 1k 1k(表示拉伸 k k k倍)或 2 θ 2 \theta 2θ(表示旋转 θ \theta θ
  • 接下来 m m m行依次输入 m m m个查询,每行包含空格分隔的四个整数 i i i j j j x x x y y y,含义如前文所述

输出格式

  • 输出到标准输出中
  • 输出共 m m m行,每行包含空格分隔的两个实数,表示对应查询的结果

样例输入

10 5
2 0.59
2 4.956
1 0.997
1 1.364
1 1.242
1 0.82
2 2.824
1 0.716
2 0.178
2 4.094
1 6 -953188 -946637
1 9 969538 848081
4 7 -114758 522223
1 9 -535079 601597
8 8 159430 -511187

样例输出

-1858706.758 -83259.993
-1261428.46 201113.678
-75099.123 -738950.159
-119179.897 -789457.532
114151.88 -366009.892

样例说明

  • 第五个查询仅对输入坐标使用了操作八:拉伸 0.716 0.716 0.716
  • 横坐标: 159430 × 0.716 = 114151.88 159430 \times 0.716 = 114151.88 159430×0.716=114151.88
  • 纵坐标: − 511187 × 0.716 = − 366009.892 -511187 \times 0.716 = -366009.892 511187×0.716=366009.892
  • 由于具体计算方式不同,程序输出结果可能与真实值有微小差异,样例输出仅保留了三位小数

评测用例规模与约定

  • 80 % 80\% 80%的测试数据满足: n , m ≤ 1000 n , m \leq 1000 n,m1000
  • 全部的测试数据满足
    • n , m ≤ 100000 n , m \leq 100000 n,m100000
    • 输入的坐标均为整数且绝对值不超过 1000000 1000000 1000000
    • 单个拉伸操作的系数 k ∈ [ 0.5 , 2 ] k \in [0.5 , 2] k[0.5,2]
    • 任意操作区间 t i , ⋯ , t j ( 1 ≤ i ≤ j ≤ n ) t_{i} , \cdots , t_{j} (1 \leq i \leq j \leq n) ti,,tj(1ijn)内拉伸系数 k k k的乘积在 [ 0.001 , 1000 ] [0.001 , 1000] [0.001,1000]范围内

评分方式

  • 如果你输出的浮点数与参考结果相比,满足绝对误差不大于 0.1 0.1 0.1,则该测试点满分,否则不得分

提示

  • C/C++:建议使用double类型存储浮点数,并使用scanf("%lf", &x);进行输入,printf("%f", x);输出,也可以使用cincout输入输出浮点数;#include <math.h>后可使用三角函数cos()sin()
  • Python:直接使用print(x)即可输出浮点数xfrom math import cos, sin后可使用相应三角函数
  • Java:建议使用double类型存储浮点数,可以使用System.out.print(x);进行输出;可使用Math.cos()Math.sin()调用三角函数

Python实现

from math import sin, cos, sqrt, atan2n, m = map(int, input().split())op = []
for _ in range(n):num1, num2 = map(float, input().split())num1 = int(num1)if num1 == 1:op.append([num2, 0])else:op.append([1, num2])for i in range(1, n):op[i][0] *= op[i - 1][0]op[i][1] += op[i - 1][1]for _ in range(m):i, j, x, y = map(int, input().split())i -= 1j -= 1r = sqrt(x * x + y * y)theta = atan2(y, x)r *= op[j][0]theta += op[j][1]if i:r /= op[i - 1][0]theta -= op[i - 1][1]x = r * cos(theta)y = r * sin(theta)print(x, y)

这篇关于【CSP】202309-2_坐标变换(其二)Python实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程