洛谷P2119 魔法陣

2022-05-01 10:09:11 字數 2481 閱讀 8685

六十年一次的魔法戰爭就要開始了,大魔法師準備從附近的魔法場中汲取魔法能量。

大魔法師有m個魔法物品,編號分別為1,2,...,m。每個物品具有乙個魔法值,我們用xi表示編號為i的物品的魔法值。每個魔法值xi是不超過n的正整數,可能有多個物品的魔法值相同。

大魔法師認為,當且僅當四個編號為a,b,c,d的魔法物品滿足xa現在,大魔法師想要知道,對於每個魔法物品,作為某個魔法陣的a物品出現的次數,作為b物品的次數,作為c物品的次數,和作為d物品的次數。

輸入格式:

輸入檔案的第一行包含兩個空格隔開的正整數n和m。

接下來m行,每行乙個正整數,第i+1行的正整數表示xi,即編號為i的物品的魔法值。

保證1 \le n \le 150001≤n≤15000,1 \le m \le 400001≤m≤40000,1 \le xi \le n1≤xi≤n。每個xi是分別在合法範圍內等概率隨機生成的。

輸出格式:

共輸出m行,每行四個整數。第i行的四個整數依次表示編號為i的物品作 為a,b,c,d物品分別出現的次數。

保證標準輸出中的每個數都不會超過10^9。

每行相鄰的兩個數之間用恰好乙個空格隔開。

輸入樣例#1:

30 8124

728529

2624

輸出樣例#1:

4 0 0 0

0 0 1 0

0 2 0 0

0 0 1 1

1 3 0 0

0 0 0 2

0 0 2 2

0 0 1 0

輸入樣例#2:

15 15

1 2

3 4 56

7 8 910

1112

1314

15

輸出樣例#2:

5 0 0 0

4 0 0 0

3 5 0 0

2 4 0 0

1 3 0 0

0 2 0 0

0 1 0 0

0 0 0 0

0 0 0 0

0 0 1 0

0 0 2 1

0 0 3 2

0 0 4 3

0 0 5 4

0 0 0 5

【樣例解釋1】

共有5個魔法陣,分別為:

物品1,3,7,6,其魔法值分別為1,7,26,29;

物品1,5,2,7,其魔法值分別為1,5,24,26;

物品1,5,7,4,其魔法值分別為1,5,26,28;

物品1,5,8,7,其魔法值分別為1,5,24,26;

物品5,3,4,6,其魔法值分別為5,7,28,29。

以物品5為例,它作為a物品出現了1次,作為b物品出現了3次,沒有作為c物品或者d物品出現,所以這一行輸出的四個數依次為1,3,0,0。

此外,如果我們將輸出看作乙個m行4列的矩陣,那麼每一列上的m個數之和都應等於魔法陣的總數。所以,如果你的輸出不滿足這個性質,那麼這個輸出一定不正確。你可以通過這個性質在一定程度上檢查你的輸出的正確性。

【資料規模】

分析:這道題有點喪病。首先方向要明確,我們肯定是要用n來做題,而不是用m,降低了複雜度.題目給了這麼多式子,我們要化簡一下題目給的這麼多式子,可以得到:

b-a=2(d-c),c-b>3(b-a),c-b>6(d-c).這樣d-c是最小單位,我們列舉d-c的長度,然後列舉d點的座標,就能求出其他4個點的座標,下面的更新過程有點棘手.

我們先用ab更新cd,如果知道了ab的組數i,又知道了d位置上的個數j,那麼c上的數就會出現i*j次,同理,利用c來更新d.接下來的一步就是利用cd更新ab.因為ab的位置我們假設是固定的,有可能會對多組cd有貢獻,我們要在處理的時候累加.

#include #include 

#include

#include

#include

using

namespace

std;

int n,m,num[40010],a[15010],b[15010],c[15010],d[15010],t[40010

];int

main()

for (int i = 1; i <= n / 9; i++) //ab --> cd

sum = 0

; x = 8 * i + 1

;

for (int j = n - 9 * i - 1; j >= 1; j--) //cd --> ab

}for (int i = 1; i <= m; i++)

printf(

"%d %d %d %d\n

",a[t[i]],b[t[i]],c[t[i]],d[t[i]]);

return0;

}

洛谷P2119 魔法陣

六十年一次的魔法戰爭就要開始了,大魔法師準備從附近的魔法場中汲取魔法能量。大魔法師有m個魔法物品,編號分別為1,2,m。每個物品具有乙個魔法值,我們用xi表示編號為i的物品的魔法值。每個魔法值xi是不超過n的正整數,可能有多個物品的魔法值相同。大魔法師認為,當且僅當四個編號為a,b,c,d的魔法物品...

洛谷2119 魔法陣

標籤 數學,遞推,模擬 題目描述 六十年一次的魔法戰爭就要開始了,大魔法師準備從附近的魔法場中汲取魔法能量。大魔法師有m個魔法物品,編號分別為1,2,m。每個物品具有乙個魔法值,我們用xi表示編號為i的物品的魔法值。每個魔法值xi是不超過n的正整數,可能有多個物品的魔法值相同。大魔法師認為,當且僅當...

洛谷 P2387 魔法森林

題目描述 為了得到書法大家的真傳,小 e 同學下定決心去拜訪住在魔法森林中的隱 士。魔法森林可以被看成乙個包含 n 個節點 m 條邊的無向圖,節點標號為 1,2,3,n,邊標號為 1,2,3,m。初始時小 e 同學在 1 號節點,隱士則住在 n 號節點。小 e 需要通過這一片魔法森林,才能夠拜訪到隱...