數學 p2117 小z的矩陣

2022-05-27 18:03:09 字數 1682 閱讀 1859

題目描述-->p2117 小z的矩陣

題目給定我們乙個正方形.

容易想到,正方形是對稱的.

推敲一下

如果我們的矩陣是這樣的↓ 閉眼瞎敲出來的.

\[\begin

&&&&\\\\

&&&&\\\\

&&&&\\\\

&&&&\\\\

&&&&\\\\

\end\]

題目給定我們的計算公式為a[i][j]×a[j][i]的和

對於這個栗子.

按照式子來的話我們這麼算

a[1][1]*a[1][1]+a[1][2]*a[2][1]+a[1][3]*

a[3][1]+a[1][4]*a[4][1]+a[1][5]*a[5][1]+

a[2][1]*a[1][2]+a[2][2]*a[2][2]+.......

..............+a[5][5]*a[5][5]

雖然不是手算,但摧殘乙個計算機你真的忍心嘛emmm

很容易地發現(一點也不容易

a[i][j]*a[j][i]與a[j][i]*a[i][j]的值相同.

如果為1,那麼他們加和就是2,%2就變成0.

如果為0,那麼他們加和依舊為0,%2依舊為0.

對答案沒有貢獻!

但是

在我們的對角線上的元素是對答案的貢獻是它的平方.

因此我們需要記錄對角線上的元素對答案的貢獻.

除了對角線上的元素,其他位置都沒有貢獻.

因此我們可以只記錄對角線上的元素的答案.

對於翻轉操作,我們很容易發現

每一行每一列均對應地控制乙個對角線上的元素.

按照上面的例子來看,那答案就是1.

如果翻轉的話,我們會改變某一位置上的元素的值.

即0->1,1->0

假如,我們改變地是第5行.那我們最後乙個元素得到的就是0.

此時答案為0.

如果我們再去翻轉其他行/列,我們得到的答案一定是1.

以此類推,我們發現,只要有翻轉操作,我們的答案一定會改變.即從0->1,1->0.

所以我們可以定義變數ans,如果有翻轉操作,就將它^=1

-----------------關於^操作.------------------

01=0,11=0.

觀察到它的性質,我們就知道如何記錄答案了!

(或者你可以!一下

關於^操作,網上有不少講解,在這裡就不展開了.

(懶------------------**---------------------

#include#define il inline

#define ri register int

il void in(int &x)

while(s>='0' and s<='9')

x*=f;

}int n,q,ans;

int main(void)

}

小P的數學問題

晚上,小p喜歡在寢室裡乙個個靜靜的學習或者思考,享受自由自在的單身生活。他總是能從所學的知識散發出奇妙的思維。今天他想到了乙個簡單的階乘問題,0!1 1!1 2!1 2 2 3!1 2 3 6 4!1 2 3 4 24 5!1 2 3 4 5 120 如果 n 1000000000,那麼n的階乘會是...

P2186 小Z的棧函式

小z最近發現了乙個神奇的機器,這個機器的所有操作都是通過維護乙個棧來完成的,它支援如下11個操作 num x 棧頂放入x。pop 拋棄棧頂元素。inv 將棧頂元素取出,然後放入它的相反數。dup 再放入乙個和棧頂元素相同的數。swp 交換棧頂的兩個元素。add 取出棧頂的兩個元素,兩元素相加,所得結...

P4111 HEOI2015 小Z的房間

你的房子可以看做是乙個包含n m個格仔的格狀矩形,每個格仔是乙個房間或者是乙個柱子。在一開始的時候,相鄰的格仔之間都有牆隔著。你想要打通一些相鄰房間的牆,使得所有房間能夠互相到達。在此過程中,你不能把房子給打穿,或者打通柱子 以及柱子旁邊的牆 同時,你不希望在房子中有小偷的時候會很難抓,所以你希望任...