【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

相关文章

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

一文详解如何在Python中使用Requests库

《一文详解如何在Python中使用Requests库》:本文主要介绍如何在Python中使用Requests库的相关资料,Requests库是Python中常用的第三方库,用于简化HTTP请求的发... 目录前言1. 安装Requests库2. 发起GET请求3. 发送带有查询参数的GET请求4. 发起PO

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

python 3.8 的anaconda下载方法

《python3.8的anaconda下载方法》本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介... 目录python3.8 版本的 Anaconda 下载与安装指南一、Anaconda 简介二、下载 An