CCF CSP 第30次(2023.09)(2_坐標變換(其二)_C++)

CCF CSP 第30次(2023.09)(2_坐標變換(其二)_C++)

    • 題目背景:
    • 題目描述:
    • 輸入格式:
    • 輸出格式:
    • 樣例輸入:
    • 樣例輸出:
    • 樣例解釋:
    • 子任務:
    • 評分方式
    • 提示:
      • 解題思路:
        • 思路一(哈希集合):
      • 代碼實現
        • 代碼實現(思路一):

時間限制: 2.0 秒
空間限制: 512 MiB

題目背景:

對于平面直角坐標系上的坐標 (x,y),小 P 定義了如下兩種操作:

  1. 拉伸 k 倍:橫坐標 x 變為 kx,縱坐標 y 變為 ky;
  2. 旋轉 θ:將坐標 (x,y) 繞坐標原點 (0,0) 逆時針 旋轉 θ 弧度(0≤θ<2π)。易知旋轉后的橫坐標為xcos?θ?ysin?θ,縱坐標為 xsin?θ+ycos?θ。設定好了包含 n 個操作的序列 (t1,t2,?,tn) 后,小 P 又定義了如下查詢:
  • i j x y:坐標 (x,y) 經過操作 ti,?,tj(1≤i≤j≤n)后的新坐標。
    對于給定的操作序列,試計算 m 個查詢的結果。

題目描述:

輸入格式:

從標準輸入讀入數據。
輸入共 n+m+1 行。
輸入的第一行包含空格分隔的兩個正整數 n 和 m,分別表示操作和查詢個數。
接下來 n 行依次輸入 n 個操作,每行包含空格分隔的一個整數(操作類型)和一個實數(k 或 θ),形如 1 k(表示拉伸 k 倍)或 2 θ(表示旋轉 θ)。
接下來 m 行依次輸入 m 個查詢,每行包含空格分隔的四個整數 i、j、x 和 y,含義如前文所述。

輸出格式:

輸出到標準輸出中。
輸出共 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 倍。
橫坐標:159430×0.716=114151.88
縱坐標:?511187×0.716=?366009.892
由于具體計算方式不同,程序輸出結果可能與真實值有微小差異,樣例輸出僅保留了三位小數。

子任務:

80% 的測試數據滿足:n,m ≤ 1000;
全部的測試數據滿足:

  • n,m≤105
  • 輸入的坐標均為整數且絕對值不超過 106
  • 單個拉伸操作的系數 k∈[0.5,2];
  • 任意操作區間 ti,?,tj(1 ≤ i ≤ j ≤ n)內拉伸系數 k 的乘積在 [0.001,1000] 范圍內。

評分方式

如果你輸出的浮點數與參考結果相比,滿足絕對誤差不大于 0.1,則該測試點滿分,否則不得分。

提示:

  • C/C++:建議使用 double 類型存儲浮點數,并使用 scanf(“%lf”, &x); 進行輸入,printf(“%f”, x);
    輸出,也可以使用 cin 和 cout 輸入輸出浮點數;#include <math.h> 后可使用三角函數 cos() 和 sin()。
  • Python:直接使用 print(x) 即可輸出浮點數 x;from math import cos, sin 后可使用相應三角函數。
  • Java:建議使用 double 類型存儲浮點數,可以使用 System.out.print(x); 進行輸出;可使用
    Math.cos() 和 Math.sin() 調用三角函數。

解題思路:

思路一(哈希集合):

1、解題步驟拆分:
輸入:首先輸入兩個整數 n 和 m,n 表示操作的數量,m 表示查詢的次數。接下來輸入 n 個操作及其參數,操作包括拉伸和旋轉。

操作存儲

  • op[i] 存儲每個操作的類型(1表示拉伸,2表示旋轉)。
  • k_cs[i] 存儲每個操作的參數(拉伸倍數或旋轉角度)。

查詢處理

  • 對于每個查詢,輸入查詢的區間 [left, right] 和初始坐標 (x, y)。
  • 根據操作類型對坐標 (x, y) 進行拉伸或旋轉變換。拉伸時直接將坐標乘以倍數,旋轉時使用旋轉矩陣進行變換。

結果輸出:輸出每次查詢變換后的坐標 (x, y),保留三位小數。

代碼實現

代碼實現(思路一):
#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
using namespace std;int main(int argc, char const *argv[])
{// 輸入 n 和 m// n表示操作的數量,m表示查詢的次數int n, m;cin >> n >> m;// op數組表示每個操作的類型,1表示拉伸,2表示旋轉// k_cs數組表示每個操作對應的參數(拉伸倍數或旋轉角度)int op[n + 1];  // 操作類型數組,下標從1到ndouble k_cs[n + 1];  // 存儲操作的參數(拉伸倍數或角度)// 輸入 n 行,描述操作的類型和參數// 每行輸入兩個數:一個操作類型(1或2),一個浮點數k(拉伸倍數或角度)for (int i = 1; i <= n; i++){cin >> op[i] >> k_cs[i];}int left, right;  // 查詢區間的左右邊界double x, y;      // 查詢點的坐標// ans二維數組用于存儲每次查詢的結果,m表示查詢的次數// 每次查詢返回的結果包含 x 和 y 兩個坐標vector<vector<double>> ans(m, vector<double>(2));// 對于每一個查詢for (int j = 0; j < m; j++){// 輸入查詢區間[左邊界,右邊界]和查詢點的坐標 (x, y)cin >> left >> right >> x >> y;// 對于指定區間內的每個操作for (int i = left; i <= right; i++){if (op[i] == 1){ // 如果是拉伸操作// 拉伸操作時,直接將x和y分別乘以拉伸倍數x = k_cs[i] * x;y = k_cs[i] * y;}else if (op[i] == 2) {  // 如果是旋轉操作// 旋轉操作時,需要用旋轉矩陣進行變換double tmpx = x, tmpy = y;x = tmpx * cos(k_cs[i]) - tmpy * sin(k_cs[i]);y = tmpx * sin(k_cs[i]) + tmpy * cos(k_cs[i]);}}// 將查詢結果存入ans數組ans[j][0] = x;ans[j][1] = y;}// 輸出所有查詢的結果,保留3位小數for (int i = 0; i < m; i++){cout << fixed << setprecision(3) << ans[i][0] << " " << ans[i][1] << endl;}return 0;
}

歡迎大家和我溝通交流(????)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73482.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73482.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73482.shtml

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

相關文章

搭建Spring Boot Admin監控系統

什么是Spring Boot Admin Spring Boot Admin 是一個用于管理和監控 Spring Boot 應用程序的開源工具。它提供了一個用戶友好的 Web 界面&#xff0c;用于集中管理和監控多個 Spring Boot 應用程序的運行狀態、健康狀況、日志、配置等信息。 Spring Boot Admin 的核心功能 應用…

機器學習中的激活函數是什么起什么作用

在機器學習&#xff0c;尤其是神經網絡中&#xff0c;?激活函數?&#xff08;Activation Function&#xff09;是一個非常重要的組件。它的主要作用是為神經網絡引入非線性&#xff0c;從而使神經網絡能夠學習和表示復雜的模式或函數。 1.激活函數的定義 激活函數是一個數學…

[CISCN 2022 初賽]ezpop(沒成功復現)

打開在線環境可以看到&#xff1a; 記得之前做過一個類似的就是有點像照著漏洞去復現。應該可以直接在網上找到鏈子去打。 www.zip查看路由是 Index/test&#xff0c;然后 post 傳參 a&#xff1a; exp&#xff08;參考了別的大神的wp&#xff09;&#xff1a; <?php //…

C 語 言 --- 二 維 數 組 的 應 用

C 語 言 --- 二 維 數 組 的 應 用 第 一 題 - - - 冒 泡 排 序冒 泡 排 序冒 泡 排 序 的 原 理 第 二 題 - - - 回 型 矩 陣特 點 第 三 題 - - - 蛇 形 矩 陣總結 &#x1f4bb;作者簡介&#xff1a;曾 與 你 一 樣 迷 茫&#xff0c;現 以 經 驗 助 你 入 門 C 語 言 &…

5G核心網實訓室搭建方案:輕量化部署與虛擬化實踐

5G核心網實訓室 隨著5G技術的廣泛應用&#xff0c;行業對于5G核心網人才的需求日益增長。高校、科研機構和企業紛紛建立5G實訓室&#xff0c;以促進人才培養、技術創新和行業應用研究。IPLOOK憑借其在5G核心網領域的深厚積累&#xff0c;提供了一套高效、靈活的5G實訓室搭建方…

寄生蟲仿生算法:基于寄生蟲特征的算法設計

寄生蟲仿生算法:基于寄生蟲特征的算法設計 基于寄生蟲行為特征的仿生算法設計 import random import numpy as npclass EnhancedPBOA:def __init__(self, host_env, max_generations, population_size50):self.host_env host_envself.max_generations max_generationsself.p…

【醫學影像 AI】基于深度學習的 ROP 病變檢測圖像評估系統

【醫學影像 AI】基于深度學習的 ROP 病變檢測圖像評估系統 0. 論文簡介0.1 基本信息0.2 摘要 1. 引言2. 材料與方法2.1 研究人群2.2 疾病分類與參考標準的制定2.3 深度學習系統開發2.4 定量嚴重程度評分2.5 數據分析 3. 結果4. 討論6. 參考文獻 0. 論文簡介 0.1 基本信息 201…

當AI學會“察言觀色“:多模態情緒識別的魔幻現實主義之旅

引言&#xff1a;AI讀臉時代的荒誕與真實 2025年的某個深夜&#xff0c;程序員小李開發的"情緒識別AI"把老板的假笑誤判為"憤怒"&#xff0c;導致全員收到《關于禁止皮笑肉不笑的通知》。這場烏龍揭開了單模態識別的遮羞布——原來AI和人一樣&#xff0c…

Cursor初體驗:excel轉成CANoe的vsysvar文件

今天公司大佬先鋒們給培訓了cursor的使用&#xff0c;還給注冊了官方賬號&#xff01;躍躍欲試&#xff0c;但是測試任務好重&#xff0c;結合第三方工具開發也是沒有頭緒。 但巧的是&#xff0c;剛好下午有同事有個需求&#xff0c;想要把一個幾千行的excel轉成canoe的系統變…

每日一題---單詞搜索(深搜)

單詞搜索 給出一個二維字符數組和一個單詞&#xff0c;判斷單詞是否在數組中出現&#xff0c; 單詞由相鄰單元格的字母連接而成&#xff0c;相鄰單元指的是上下左右相鄰。同一單元格的字母不能多次使用。 數據范圍&#xff1a; 0 < 行長度 < 100 0 < 列長度 <…

【深度學習】多源物料融合算法(一):量綱對齊常見方法

目錄 一、引言 二、量綱對齊常見方法 2.1 Z-score標準化Sigmoid歸一化 2.2 Min-Max 歸一化 2.3 Rank Transformation 2.4 Log Transformation 2.5 Robust Scaling 3、總結 一、引言 類似抖音、快手、小紅書等產品的信息流推薦業務&#xff0c;主要通過信息流廣告、信…

deepseek為什么要開源

一、生態位的搶占與鎖定&#xff1a;以 JDK 版本為例? 在軟件開發的世界里&#xff0c;生態位的搶占和先入為主的效應十分顯著。就拿 Java 開發中的 JDK 版本來說&#xff0c;目前大多數開發者仍在廣泛使用 JDK8。盡管 JDK17 和 JDK21 已經推出&#xff0c;且具備更多先進特性…

【AI】內容生成式AI(AIGC)的深度分析與擴展

引言 隨著人工智能&#xff08;AI&#xff09;技術的迅速發展&#xff0c;AI生成內容&#xff08;AIGC&#xff09;已經在多個領域表現出巨大潛力&#xff0c;改變了內容創作的方式。這篇文章將詳細介紹AI生成內容的技術原理、應用領域、優缺點、未來趨勢以及相關倫理問題&…

用C++新建快捷方式

1.創建文件 新建一個文件Ink.cpp,系統會自動生成對應的EXE文件 2.編寫代碼 #include<stdlib.h> int main(){ system("powershell -command \"$WshShellNew-Object -comObject WScript.Shell; $Shortcut$WshShell.CreateShortcut(\%UserProfile%\\Desktop\\1.…

前端Html5 Canvas面試題及參考答案

目錄 Canvas 元素的默認尺寸是多少?如何正確設置其寬高以避免圖像拉伸? 如何獲取 Canvas 的 2D 上下文對象?3D 上下文支持哪些技術? canvas.width 與 canvas.style.width 的區別是什么? Canvas 支持的圖像格式有哪些?如何將 Canvas 轉換為 Base64 圖片? Canvas 中如…

基于Python的天氣預報數據可視化分析系統-Flask+html

開發語言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.8數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;PyCharm 系統展示 系統登錄 可視化界面 天氣地圖 天氣分析 歷史天氣 用戶管理 摘要 本文介紹了基于大數據…

基于Uniapp開發tab選項卡/標簽欄前端組件

在開發一些業務場景時候&#xff0c;可能需要切換標簽欄來展示不同的信息列表。 為此開發了一個Uniapp組件&#xff08;myTab&#xff09;&#xff0c;下面為組件的展示效果&#xff1a; 案例代碼&#xff1a; <template><view class"content"><myt…

練習題:87

目錄 Python題目 題目 題目分析 代碼實現 代碼解釋 列表推導式部分&#xff1a; 變量賦值和輸出&#xff1a; 運行思路 結束語 Python題目 題目 使用列表推導式生成一個包含 1 到 100 中所有偶數的列表。 題目分析 本題要求使用 Python 的列表推導式生成一個包含 …

【DevOps】 基于數據驅動的Azure DevOps案例實現

推薦超級課程: 本地離線DeepSeek AI方案部署實戰教程【完全版】Docker快速入門到精通Kubernetes入門到大師通關課AWS云服務快速入門實戰目錄 **客戶場景:****解決方案:****架構:****架構細節:****結論**客戶場景: 為大量客戶提供基于Azure云的成果物重復部署服務。這可能…

文本組件+Image組件+圖集

Canvas部分知識補充 元素渲染順序 以Hierarchy參考 下方物體在上方物體前顯示 子物體在父物體前顯示 下方物體永遠在前顯示&#xff0c;無論上方的層次結構 資源導入 絕對路徑&#xff1a;C:\Windows\Fonts下的許多字體可以用做UIText的字體資源 圖片導入&#xff1a; 1.圖…