在寫這篇文章之前,***已經寫過了幾篇關於改座標字元主題的文章,想要了解的朋友可以去翻一下之前的文章
時光制約:
2000 ms | 記憶體制約:
65535 kb
難度:
5
每日一道理
聰明人學習,像搏擊長空的雄鷹,仰視一望無際的大地;愚笨的人學習,漫無目的,猶如亂飛亂撞的無頭飛蛾;刻苦的人學習,像彎彎的河流,雖有曲折,但終會流入大海;懶惰的人學習,像水中的木頭,阻力越大倒退得越快。
描述 平面上有不超越10000個點,座標都是已知的,現在可能對全部的點做以下幾種操縱:
平移必定距離(m),相對x軸上下翻轉(x),相對y軸閣下翻轉(y),座標縮小或放大必定的倍數(s),全部點對座標原點逆時針旋轉必定角度(r)。
操縱的次數不超越1000000次,求終究全部點的座標。
輸入
只有一組測試資料
測試資料的第一行是兩個整數n,m,分離表示點的個數與操縱的個數(n<=10000,m<=1000000)
隨後的一行有n對數對,每個數對的第乙個數表示乙個點的x座標,第二個數表示y座標,這些點初始座標鉅細絕對值不超越100。
隨後的m行,每行代表一種操縱,行首是乙個字元:
首字元如果是m,則表示平移操縱,該行後面將跟兩個數x,y,表示把全部點按向量(x,y)平移;
首字元如果是x,則表示把全部點相對於x軸進行上下翻轉;
首字元如果是y,則表示把全部點相對於y軸進行閣下翻轉;
首字元如果是s,則隨後將跟乙個數p,表示座標放大p倍;
首字元如果是r,則隨後將跟乙個數a,表示全部點相對座標原點逆時針旋轉必定的角度a(單位是度)
輸出 每行輸出兩個數,表示乙個點的座標(對結果四捨五入到小數點後1位,輸出一位小數字)
點的輸出順序應與輸入順序保持一致
樣例輸入
2 5
1.0 2.0 2.0 3.0xy
m 2.0 3.0
s 2.0
r 180
樣例輸出
-2.0 -2.0
0.0 0.0
解題思路: 每個點的操縱需要m次
如果對每個點都進行模擬,n個點的時光複雜度就是o(nm)
把全部操縱相乘存到矩陣裡,每個點只需要成乘矩陣一次就可失掉m次操縱後的結果
假設起始點的座標為(x,y)
其實很輕易證明每次操縱要乘與什麼矩陣
x1 x2 x3 x x1*x+x2*y+x3
x4 x5 x6 x y = x4*x+x5*y+x6
x7 x8 x9 1 x7*x+x8*y+x9
如平移向量(a,b),x1=x5=1,x2=x4=0,x3=a,x4=b
值得注意的是矩陣有結合律但是沒有交換率,前面的操縱應當放在乘號的左邊
**:
文章結束給大家分享下程式設計師的一些笑話語錄: 問路
有乙個駕駛熱氣球的人發現他迷路了。他降低了飛行的高度,並認出了地面 上的乙個人。他繼續下降高度並對著那個人大叫,「打擾一下,你能告訴我我 在哪嗎?」
下面那個人說:「是的。你在熱氣球裡啊,盤旋在 30 英呎的空中」。
熱氣球上的人說:「你一定是在 it 部門做技術工作」。
「沒錯」,地面上的人說到,「你是怎麼知道的?」
「呵呵」,熱氣球上的人說,「你告訴我的每件事在技術上都是對的,但對都沒 有用」。
地面上的人說,「你一定是管理層的人」。
「沒錯」,熱氣球上的人說,「可是你是怎麼知道的?」
「呵呵」,地面上的那人說到,「你不知道你在**,你也不知道你要去哪,你 總希望我能幫你。你現在和我們剛見面時還在原來那個地方,但現在卻是我 錯了」。
NYOJ 298 點的變換 矩陣乘法
最好還是自己手推一下矩陣式子.不算太難.但是有一些小知識 首先當然是矩陣的細節.矩陣是不支援交換率的.所以如圖的式子乘進去時要放在左邊.還有的比如說 cmath裡的sin函式用的是弧度制.需要把度數 180 m pi m pi是cmath裡定義的常數 double在取固定小數字的時候小負數四捨五入會...
NYOJ 298 相變點(矩陣高速功率)
時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描寫敘述 平面上有不超過10000個點。座標都是已知的。如今可能對全部的點做下面幾種操作 平移一定距離 m 相對x軸上下翻轉 x 相對y軸左右翻轉 y 座標縮小或放大一定的倍數 s 全部點對座標原點逆時針旋轉一定角度 r 操作的次數不...
點的變換(矩陣轉化)
link 時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 平面上有不超過10000個點,座標都是已知的,現在可能對所有的點做以下幾種操作 平移一定距離 m 相對x軸上下翻轉 x 相對y軸左右翻轉 y 座標縮小或放大一定的倍數 s 所有點對座標原點逆時針旋轉一定角度 r 操作的...