1. 程式人生 > 遊戲資訊 >【翻譯+考據】《刺客信條:英靈殿攻略》OST 古北歐語歌詞(更新至"末日曙光")

【翻譯+考據】《刺客信條:英靈殿攻略》OST 古北歐語歌詞(更新至"末日曙光")

題目描述 Scarlet最近學會了一個數組魔法,她會在n*nn∗n二維陣列上將一個奇數階方陣按照順時針或者逆時針旋轉90°, 首先,Scarlet會把11到n^2n 2 的正整數按照從左往右,從上至下的順序填入初始的二維陣列中,然後她會施放一些簡易的魔法。 Scarlet既不會什麼分塊特技,也不會什麼Splay套Splay,她現在提供給你她的魔法執行順序,想讓你來告訴她魔法按次執行完畢後的二維陣列。 輸入格式 第一行兩個整數n,mn,m,表示方陣大小和魔法施放次數。 接下來mm行,每行44個整數x,y,r,zx,y,r,z,表示在這次魔法中,Scarlet會把以第xx行第yy列為中心的2r+12r+1階矩陣按照某種時針方向旋轉,其中z=0z=0表示順時針,z=1z=1表示逆時針。 輸出格式 輸出nn行,每行nn個用空格隔開的數,表示最終所得的矩陣 輸入輸出樣例 輸入 #1 5 4 2 2 1 0 3 3 1 1 4 4 1 0 3 3 2 1 輸出 #1 5 10 3 18 15 4 19 8 17 20 1 14 23 24 25 6 9 2 7 22 11 12 13 16 21 這個主要是推公式,模擬; 我當時想到了複數,複平面內,乘i就是逆時針旋轉90度。順時針就乘 -i; 後來查資料,有c++中有專門的複數實現,複數用了實現旋轉也很方便; 但。。。。 我還沒有去學。 所以,我模擬了一下複數的座標; 先把座標轉換為,以x,y為原點的座標系; 橫:i-x 縱:j-y 複數乘i的模擬: 橫縱座標交換後,橫座標變為負數。 y-j i-x 然後,再變換為原來的座標系 y-j+a i-x+b 萌新第一次寫題解,已經很詳細了。求大佬輕噴。 AC程式碼 #include using namespace std; const int N=510; int m[N][N],g[N][N]; void trans_m(int x,int y,int r,int z){ if(z==1){ for(int i=x-r; i<=x+r; i++){ for(int j=x-r; j<=x+r; j++){ g[y-j+x][i-x+y]=m[i][j]; } } } else { for(int i=x-r; i<=x+r; i++){ for(int j=x-r; j<=x+r; j++){ g[j-y+x][x-i+y]=m[i][j]; } } } for(int i=x-r; i<=x+r; i++){ for(int j=x-r; j<=x+r; j++){ m[i][j]=g[i][j]; } } } void solve(){ int n,m0,x,y,r,z,num=1; cin>>n>>m0; for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ m[i][j]=num++; } } for(int i=0; i>x>>y>>r>>z; trans_m(x,y,r,z); } for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ cout<
;>