幾何 模擬 二次元變換 計蒜客 T3213

2022-08-19 18:18:15 字數 2678 閱讀 3202

aslky有乙個 n×n

'>n×n的矩形,每個位置上都有乙個數,有 q

'>q次操作,每次他會讓你上下翻轉 (ud

)'>(ud),左右反轉 (lr

)'>(lr),順時針旋轉 90∘(

sz)'>90∘(sz),逆時針旋轉 90∘(

nz)'>90∘(nz),請你輸出最後的矩形。

第一行,兩個數 n,q

'>n,q。

接下來 n

'>n行,每行 n

'>n個數,代表矩形。

接下來 q

'>q行,每行乙個字串,代表操作。

n'>n 行,每行 n

'>n 個數代表矩形。

對於 10

%'>10%的資料,1≤n

≤10'>1≤n≤10;

對於 100

%'>100%的資料,1≤n

≤1000,1

≤q≤10

6'>1≤n≤1000,1≤q≤1e6

3 3

1 2 3

1 2 3

1 2 3

nzsz

sz

1 1 1

2 2 2

3 3 3

一次操作的複雜度為o(n^2),直接模擬複雜度為o(q*n^2),n<=1000,q<=1e6,計算次數為1e12,直接模擬必定超時,需要優化。如果該題無翻轉變換只有旋轉變化就簡單了,sz和nz可以相互抵消,最後再對結果模4,就能大程度的優化操作次數。但加上翻轉變化,那就要考慮兩種翻轉變化的優化,以及翻轉變化和旋轉變化的相互影響,還有影象在這幾種變化中擁有多少種狀態。

通過畫圖模擬,我們可以得出,影象在這2種變化中共有8種狀態,首先是,原影象只通過旋轉可以有4種狀態,加上翻轉變化後,我們發現無論是上下翻轉還是左右翻轉,其實都是把影象變成映象面,影象在這種映象面同樣有4種形態,合起來共8種。

對翻轉變化的優化,我們容易發現,同時經過兩次上下翻轉或者左右翻轉後影象復原,所以,單向翻轉變化可以模2.再對翻轉變化進行研究,發現影象經過一次上下翻轉一次左右翻轉,會脫離映象圖變為原圖。歸納:乙個影象經過一次翻轉變化後變為映象圖,這個映象圖再經過一次翻轉變換後復原為原圖。

接下來是研究兩種變化之間的關係。容易發現上下翻轉的影象通過旋轉可變為左右翻轉的影象,通過這個性質我們可以得出乙個等式:lr=ud+2*sz.  通過這個等式我們可以把所有的左右翻轉變化變為上下翻轉變化加上旋轉變化。

剩下的就是考慮在翻轉變化後旋轉變化有何影響,容易知道,在映象圖狀態時,對影象的順時針旋轉將相當於原影象的逆時針旋轉,逆時針亦然。

#include#include

using

namespace

std;

int s[1005][1005

];int f[1005][1005

];int

n;void

ud()

}}void

lr()

}}void

sz()

}for (int i = 0; i < n; i++)

}}void

nz()

}for (int i = 0; i < n; i++)

}}void

pr()

}int

main()

/*pr();

cout << '\n';*/}

pr();

}

#include#include

#include

#include

using

namespace

std;

int r(int l, int

r) char s[3] = ;

intmain()

return0;

}

#include#include

using

namespace

std;

int s[1005][1005

];int f[1005][1005

];int

n;void

ud()

}}void

sz()

}for (int i = 0; i < n; i++)

}}void

pr()

}int

main()

else

break

;

case'l

':if (flag == 1

)

else

break

;

case's

':if (flag == 1

)

else

break

;

case'n

':if (flag == 1

)

else

break

; }

if(sz>=0

) sz %= 4

;

else

}if (flag==1

)

else

pr();

}

計蒜客 二次求字首和

傳送門 思路 二次求字首和 區間問題轉化為求字首和問題。相減一定要先加mod再餘mod 第一次 sum i sum i 1 t i sum j sum l 1 sum j 1 sum l 1 sum r sum l 1 相加在一起可歸結為 sum j sum j 1 sum j 2 sum r l ...

二次元的正確開啟方式

本文 github 已收錄,有技術乾貨文章,整理的學習資料,一線大廠面試經驗分享等,歡迎 star 和 完善。去年發表的 talking head 大家都看過了吧?最近,這位谷歌工程師對演算法進行了公升級,talking head 2 效果更好!只需要一張 png 二次元角色,就可以生成虛擬偶像,生...

繪畫教程 二次元男生頭髮的畫法

男性的髮型不如女性般豐富,但不同的造型和線條運用也能形成多樣的變化。男性的髮絲通常較硬,形成的發簇形狀也更像有稜角的幾何形。男生頭髮的基本畫法 正面 拉出發際的輔助線 以沒有頭髮和臉的頭部作為基礎,從額頭到耳朵上畫一條髮際線的輔助線。畫劉海 參考額頭的輔助線線,畫出劉海。畫一束頭髮 在頭頂部做乙個螺...