【CSP试题回顾】202309-2-坐标变换(其二)

CSP-202309-2-坐标变换(其二)

关键点总结

1.输入输出的同步关闭,以加快I/O操作的速度

  • 这一点还是很重要的,本题代码如果不进行输入输出的同步关闭会时间超限。
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);

2.设置输出的小数精度

#include <iostream>
#include <iomanip>  // 导入设置精度所需的库
using namespace std;int main() {double number = 3.14159265; // 这是我们要格式化的浮点数cout << std::fixed << setprecision(4); // 设置数字格式为固定小数点,并保留小数点后四位cout << number << endl; // 输出结果return 0;
}

3.累计存储k和theta减少时间开销

  • 本题中对坐标变换(比如缩放和旋转)操作的累计处理,其中 k 代表缩放比例,theta 代表旋转角度。在这种处理方法中,ktheta 的值不是独立存储每次操作的结果,而是累积地存储从初始状态到当前状态的变换结果。 通过累积地存储变换参数(ktheta),程序可以避免在每次查询时重复计算从初始状态到当前状态的所有变换。这样,当进行大量的查询时,可以大大减少计算时间,提高程序的效率。在这种方法中,如果需要计算从一个状态到另一个较早状态的逆变换,可以简单地通过比较两个状态的累积参数来实现。这比单独存储每次变换的结果更为简便,因为不需要单独计算逆变换。

解题思路

  1. 结构体定义:定义结构体MyOperate来存储每次操作的k(缩放因子)和θ(旋转角度)。

  2. 主函数初始化:在main函数中,首先设置了输入输出的同步关闭,以加快I/O操作的速度。然后读入操作的总数n和查询的总数m。接下来,初始化一个MyOperate类型的向量optList来存储每次操作后的kθ值。向量的大小设置为n+1,以便存储初始状态(即第0次操作,此时k=1θ=0)和之后每次操作的结果。

  3. 输入操作处理:对于每次输入的操作,根据操作的类型(缩放或旋转),更新结构体数组optList中对应的kθ值。对于缩放操作,更新k值并保持θ不变;对于旋转操作,更新θ值而保持k不变。新的值是基于前一次操作的结果计算得出的

  4. 查询处理:对于每次查询,读入起始操作编号start、结束操作编号end以及查询点的初始坐标(x, y)。使用startend来确定查询范围内的总缩放因子和总旋转角度,即从startend这段操作对点的总影响。然后根据这个总缩放因子和总旋转角度来计算点的最终位置。

  5. 坐标变换:使用总缩放因子kTemp和总旋转角度thetaTemp对点(x, y)进行变换。先对点进行缩放,然后根据旋转角度进行旋转。旋转时需要用到cos(thetaTemp)sin(thetaTemp)来更新点的坐标。

  6. 输出结果:最后,输出经过所有操作后点的新坐标。使用setprecision(4)来设置输出的小数精度。

完整代码

#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>  // 导入设置精度所需的库
using namespace std;struct MyOperate
{double k;double theta;
};int n, m;int main() {  ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> m;vector<MyOperate>optList(n + 1);// 初始化for (int i = 0; i < n + 1; i++){optList[i].k = 1, optList[i].theta = 0;}// 输入操作for (int i = 1; i <= n; i++){double optFlag, optNum;cin >> optFlag >> optNum;// kif (optFlag==1){optList[i].k = optList[i - 1].k * optNum;optList[i].theta = optList[i - 1].theta;}// thetaelse if (optFlag == 2){optList[i].theta = optList[i - 1].theta + optNum;optList[i].k = optList[i - 1].k;}}// 输入查询for (int i = 0; i < m; i++){int start, end;double x, y;cin >> start >> end >> x >> y;double kTemp = optList[end].k / optList[start - 1].k;double thetaTemp = optList[end].theta - optList[start - 1].theta;double awsX, awsY;awsX = x * kTemp, awsY = y * kTemp;double awsX_temp = awsX, awxY_temp = awsY;awsX = awsX_temp * cos(thetaTemp) - awxY_temp * sin(thetaTemp);awsY = awsX_temp * sin(thetaTemp) + awxY_temp * cos(thetaTemp);cout << fixed << setprecision(4);cout << awsX << " " << awsY << endl;}return 0;
}

请添加图片描述

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

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

相关文章

K8S中POD的控制器

一、Pod控制器及其功用 Pod控制器&#xff0c;又称之为工作负载&#xff08;workload&#xff09;&#xff0c;是用于实现管理pod的中间层&#xff0c;确保pod资源符合预期的状态&#xff0c;pod的资源出现故障时&#xff0c;会尝试进行重启&#xff0c;当根据重启策略无效&am…

Linux基础命令[9]-wc

文章目录 1. wc 命令说明2. wc 命令语法3. wc 命令示例3.1 不加参数3.2 -c&#xff08;统计字节数&#xff09;3.3 -m&#xff08;统计字符数&#xff09;3.4 -l&#xff08;统计行数&#xff09;3.5 -L&#xff08;最长一行的长度&#xff09;3.6 -w&#xff08;统计单词数&am…

Arcgis实现点位空间位置从上到下从左到右排序

效果 背景 工作项目中经常会遇到需要对网格进行编号&#xff0c;而编号是有一定原则的&#xff0c;比如空间位置从上到下从左到右&#xff0c;或者其它原则&#xff0c;那么都可以通过下面的方式来实现 1、准备数据 点shp文件&#xff0c;查看初始FID字段标注&#xff0c;目…

transformer--transformer模型构建和测试

前面几节进行了各种组件的学习和编码&#xff0c;本节将组件组成transformer&#xff0c;并对其进行测试 EncoderDecoder 编码器解码器构建 使用EnconderDecoder实现编码器-解码器结构 # 使用EncoderDeconder类实现编码器和解码器class EncoderDecoder(nn.Module):def __ini…

飞书文档批量导出

背景需求 最近所参与的项目即将结项&#xff0c;需要将飞书中的产品需求文档&#xff08;PRD&#xff09;交付给甲方&#xff0c;由于文档较多&#xff0c;大概有两百多个&#xff0c;一个一个的下载导出&#xff0c;太麻烦了&#xff08;PS&#xff1a;本人比较懒&#xff09;…

【MySQL】表的约束——空属性、默认值、列描述、zerofill、主键、自增长、唯一键、外键

文章目录 MySQL表的约束1. 空属性2. 默认值3. 列描述4. zerofill5. 主键6. 自增长7. 唯一键8. 外键 MySQL 表的约束 MySQL中的表的约束是一种规则&#xff0c;用于限制或保护表中数据的完整性和合法性。约束可以确保数据在插入、更新或删除时满足特定的条件&#xff0c;从而维护…

MySQL相关问题

MySQL相关问题 一、MySQL支持哪些存储引擎&#xff1f;二、MySQL是如何执行一条SQL的&#xff1f;三、MySQL数据库InnoDB存储引擎是如何工作的&#xff1f;四、如果要对数据库进行优化&#xff0c;该怎么优化&#xff1f;五、MySQL如何定位慢查询&#xff1f;六、如何分析MySQL…

揭秘App访问量背后的秘密:数据统计与分析

在移动互联网时代&#xff0c;App已成为人们日常生活的重要组成部分。对于App运营者来说&#xff0c;了解用户的访问量、行为习惯等数据至关重要。本文将深入探讨如何精准统计App访问量&#xff0c;为运营者提供有价值的数据支持。 一、App访问量统计的重要性 访问量是衡量A…

计算机专业必看的十部电影

计算机专业必看的十部电影 1. 人工智能2. 黑客帝国3. 盗梦空间4. 社交网络5. Her6. 模仿游戏7. 斯诺登8. 头号玩家9. 暗网10. 网络迷踪 计算机专业必看的十部电影&#xff0c;就像一场精彩盛宴&#xff01; 《黑客帝国》让你穿越虚拟世界&#xff0c;感受高科技的魅力《模仿游戏…

公网IP怎么获取?

公网IP是网络中设备的唯一标识符&#xff0c;用于在Internet上进行通信和定位。对于普通用户来说&#xff0c;了解如何获取自己的公网IP是很有必要的&#xff0c;本文将介绍几种获取公网IP的方法。 方法一&#xff1a;通过路由器查询 大多数家庭和办公室使用的路由器都会有一个…

深入解析Mybatis-Plus框架:简化Java持久层开发(七)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本章节介绍如何通过Mybatis-Plus删除数据库中的数据。 本章节不需要前置准备&#xff0c;继续使用之前的测试类&#xff0c;数据库表进行操作。 &#x1f4…

day03_Vue_Element

文章目录 01.Ajax1.1 Ajax 概述1.2 同步异步1.3 原生Ajax 2. Axios2.1 Axios的基本使用2.2 Axios快速入门2.3请求方法的别名2.4 案例 3 前后台分离开发3.1 前后台分离开发介绍 04 YAPI4.1 YAPI介绍4.2 接口文档管理 05 前端工程化5.1 前端工程化介绍5.2 前端工程化入门5.2.1 环…

【Python】变量的引用

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

2024.3.4 作业

1、流式域套接字 1>tcp服务端实现 #include<myhead.h> int main(int argc, const char *argv[]) {//1、创建套接字int sfd socket(AF_UNIX, SOCK_STREAM, 0);if(sfd -1){perror("socket error");return -1;}//2、判断套接字文件是否存在&#xff0c;如果…

5G工业智能网关保障煤矿安全生产

随着物联网技术发展与煤矿需求的持续激增&#xff0c;矿山矿井的分布范围广泛、户外环境恶劣等管理问题急需解决&#xff0c;而物联网网关工业级设计能够无惧恶劣环境干扰&#xff0c;轻松解决户外网络部署问题。 工业网关通过采集矿井内的各类传感器数据对矿井进行远程监控&a…

【NR 定位】3GPP NR Positioning 5G定位标准解读(五)

前言 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;二&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位…

[GYCTF2020]EasyThinking --不会编程的崽

看标题就知道&#xff0c;这大概率是关于thinkphp的题目。先尝试错误目录使其报错查看版本号 thinkphp v6.0.0&#xff0c;在网上搜索一下&#xff0c;这个版本有一个任意文件上传漏洞。参考以下文章。 https://blog.csdn.net/god_zzZ/article/details/104275241 先注册一个账…

VL53L8CX驱动开发(1)----驱动TOF进行区域检测

VL53L8CX驱动开发----1.驱动TOF进行区域检测 概述视频教学样品申请源码下载主要特点硬件准备技术规格系统框图应用示意图区域映射生成STM32CUBEMX选择MCU 串口配置IIC配置LPn 设置X-CUBE-TOF1串口重定向代码配置Tera Term配置演示结果 概述 VL53L8CX是一款8x8多区域ToF测距传感…

STM32(6)中断

1.中断 1.1 中断的概念 STM32的中断&#xff1a; 1.2 中断优先级 用数字的大小表示中断优先级的高低&#xff0c;数字的范围&#xff1a;0000--1111&#xff08;二进制&#xff09;&#xff0c;即0-15&#xff0c;共16级优先级。 进一步对这4位二进制数进行划分&#xff0c;可…

demo型xss初级靶场

一、环境 XSS Game - Ma Spaghet! | PwnFunction 二、开始闯关 第一关 看看代码 试一下直接写 明显进来了为什么不执行看看官方文档吧 你不执行那我就更改单标签去使用呗 ?somebody<img%20src1%20onerror"alert(1)"> 防御&#xff1a; innerText 第二关…