BZOJ 3288 Mato矩陣 解題報告

2022-08-03 13:57:19 字數 805 閱讀 3207

這個題好神呀。。orz taorunz

有乙個結論,這個結論感覺很優美:

$$ans = \prod_^\varphi(i)$$

至於為什麼呢,大概是這樣子的:

對於每個數字 $x$,第 $x$ 行有 $x - \varphi(x)$ 個數字不為 $1$,則說明這一行要被消 $x - \varphi(x)$ 次(別忘了每一行都會被 $1$ 給消一次),每次消元都會令 $a[x][x]$ 減一,所以 $a[x][x]$ 最後會變成 $\varphi(x)$,所以答案就是這個啦。

時間空間複雜度均為 $o(n)$。

1 #include 2 typedef long

long

ll;3

#define n 1000000 + 5

4#define m 100000 + 5

5#define mod 100000000767

int n, ans = 1

, phi[n], q[m];89

intmain()

1019

for (int j = 1; j <= q[0] && i * q[j] <= n; j ++)

2026 phi[i * q[j]] = phi[i] *phi[q[j]];27}

28 ans = (ll) ans * phi[i] %mod;29}

30 printf("

%d\n

", ans);

31return0;

32 }

3288_gromah

bzoj3289 Mato的檔案管理

給定乙個序列,每次詢問乙個區間,你可以交換相鄰兩個元素,這個區間你最少需要多少次交換才能使其有序。我們觀察,每次交換如果交換a i 和a i 1 那麼顯然a i a i 1 交換後逆序對個數減一。當序列逆序對個數為0時序列就有序。那麼顯然題意就是詢問區間逆序對個數。我們可以用莫隊演算法來做。因為它符...

bzoj 3289 Mato的檔案管理

description mato同學從各路神犇以各種方式 你們懂的 收集了許多資料,這些資料一共有n份,每份有乙個大小和乙個編號。為了防止他人偷拷,這些資料都是加密過的,只能用mato自己寫的程式才能訪問。mato每天隨機選乙個區間 l,r 他今天就看編號在此區間內的這些資料。mato有乙個習慣,他...

bzoj3289 Mato的檔案管理

description mato同學從各路神犇以各種方式 你們懂的 收集了許多資料,這些資料一共有n份,每份有乙個大小和乙個編號。為了防止他人偷拷,這些資料都是加密過的,只能用mato自己寫的程式才能訪問。mato每天隨機選乙個區間 l,r 他今天就看編號在此區間內的這些資料。mato有乙個習慣,他...