【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.pswp.cn/news/719275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

職場中的祖傳代碼處理建議

程序員是如何看待“祖傳代碼”的&#xff1f; 祖傳代碼的由來 在實際的程序員工作中&#xff0c;祖傳代碼是常見的。因為真正的互聯網職場生活中&#xff0c;業務變動調整頻繁&#xff0c;每到一個新的業務線&#xff0c;第一件事就是熟悉現有工程代碼&#xff0c;看舊文檔等…

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;…

ROS create_wall_timer/create_timer函數區別

在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;create_wall_timer 和 create_timer 是用于創建定時器的兩個不同的函數&#xff0c;它們在使用上有一些區別&#xff1a; Clock Type: create_wall_timer: 創建的定時器是基于Wall clock的&#xff0c;這意…

軟考筆記--結構化分析方法

結構化分析&#xff08;SA&#xff09;方法的基本思想是自定向下&#xff0c;逐層分解&#xff0c;把一個大問題分解成若干個小問題&#xff0c;每一個小問題再分解成若干個更小的問題。經過逐層分解&#xff0c;每個最低層的問題都是足夠簡單、容易解決的。 SA方法分析模型的…

78. 子集(力扣LeetCode)

文章目錄 78. 子集題目描述回溯算法 78. 子集 題目描述 給你一個整數數組 nums &#xff0c;數組中的元素 互不相同 。返回該數組所有可能的子集&#xff08;冪集&#xff09;。 解集 不能 包含重復的子集。你可以按 任意順序 返回解集。 示例 1&#xff1a; 輸入&#xff…

selenium高亮元素

def set_high_light_elment(self, element): """高亮web元素。 Args: element: WebElement:web元素 """ element_styleelement.get_attribute(style) self.mark_dom_text(element_s…

【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…

一文詳解mysql 的鎖

MySQL鎖是用于管理數據庫中的并發操作的一種機制&#xff0c;它可以確保數據的一致性和完整性。 按范圍劃分&#xff1a;包括全局鎖、表級鎖、頁級鎖和行級鎖。 按類型劃分&#xff1a;包括間隙鎖、臨鍵鎖和記錄鎖。 按級別劃分&#xff1a;包括共享鎖&#xff08;S鎖&#xff…

如何在Windows輕量應用服務器上安裝和配置SSH?

如何在Windows輕量應用服務器上安裝和配置SSH&#xff1f; 檢查OpenSSH的可用性&#xff1a;首先&#xff0c;需要以管理員身份打開PowerShell并運行命令Get-WindowsCapability - Online | Where-Object Name - like OpenSSH*來檢查OpenSSH服務是否可用。如果服務未啟動或不可…

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年獲評…