2038 國家集訓隊 小Z的襪子 莫隊

2022-09-14 16:27:14 字數 1722 閱讀 4280

作為乙個生活散漫的人,小z每天早上都要耗費很久從一堆五顏六色的襪子中找出一雙來穿。終於有一天,小z再也無法忍受這惱人的找襪子過程,於是他決定聽天由命……

具體來說,小z把這n只襪子從1到n編號,然後從編號l到r(l 儘管小z並不在意兩隻襪子是不是完整的一雙,甚至不在意兩隻襪子是否一左一右,他卻很在意襪子的顏色,畢竟穿兩隻不同色的襪子會很尷尬。

你的任務便是告訴小z,他有多大的概率抽到兩隻顏色相同的襪子。當然,小z希望這個概率盡量高,所以他可能會詢問多個(l,r)以方便自己選擇。

輸入檔案第一行包含兩個正整數n和m。n為襪子的數量,m為小z所提的詢問的數量。接下來一行包含n個正整數ci,其中ci表示第i只襪子的顏色,相同的顏色用相同的數字表示。再接下來m行,每行兩個正整數l,r表示乙個詢問。

包含m行,對於每個詢問在一行中輸出分數a/b表示從該詢問的區間[l,r]中隨機抽出兩隻襪子顏色相同的概率。若該概率為0則輸出0/1,否則輸出的a/b必須為最簡分數。(詳見樣例)

6 41 2 3 3 3 2

2 61 3

3 51 6

2/50/1

1/14/15

【樣例解釋】

詢問1:共c(5,2)=10種可能,其中抽出兩個2有1種可能,抽出兩個3有3種可能,概率為(1+3)/10=4/10=2/5。

詢問2:共c(3,2)=3種可能,無法抽到顏色相同的襪子,概率為0/3=0/1。

詢問3:共c(3,2)=3種可能,均為抽出兩個3,概率為3/3=1/1。

注:上述c(a, b)表示組合數,組合數c(a, b)等價於在a個不同的物品中選取b個的選取方案數。

【資料規模和約定】

30%的資料中 n,m ≤ 5000;

60%的資料中 n,m ≤ 25000;

100%的資料中 n,m ≤ 50000,1 ≤ l < r ≤ n,ci ≤ n。

莫隊裸題

注意開long long

1 #include2 #include3 #include4 #include5 #include6

#define n (50000+100)

7#define ll long long

8using

namespace

std;910

struct

nodeask[n];

11 ll n,m,unit,a[n],l=1,r=0

,sum,cnt[n];

1213

bool cmp1(node a,node b)

14bool cmp2(node a,node b)

15 ll gcd(ll a,ll b)

1617

18void ins(ll x)

19void del(ll x)

20void

moqueue(ll x)

2134}35

36int

main()

3748 sort(ask+1,ask+m+1

,cmp1);

49for (ll i=1;i<=m;++i)

50moqueue(i);

51 sort(ask+1,ask+m+1

,cmp2);

52for (ll i=1;i<=m;++i)

53 printf("

%lld/%lld\n

",ask[i].ans1,ask[i].ans2);

54 }

國家集訓隊2010 小Z的襪子 莫隊演算法

作為乙個生活散漫的人,小z每天早上都要耗費很久從一堆五顏六色的襪子中找出一雙來穿。終於有一天,小z再也無法忍受這惱人的找襪子過程,於是他決定聽天由命 具體來說,小z把這n只襪子從1到n編號,然後從編號l到r l 儘管小z並不在意兩隻襪子是不是完整的一雙,甚至不在意兩隻襪子是否一左一右,他卻很在意襪子...

國家集訓隊2010 小Z的襪子 莫隊演算法

作為乙個生活散漫的人,小z每天早上都要耗費很久從一堆五顏六色的襪子中找出一雙來穿。終於有一天,小z再也無法忍受這惱人的找襪子過程,於是他決定聽天由命 具體來說,小z把這n只襪子從1到n編號,然後從編號l到r l 儘管小z並不在意兩隻襪子是不是完整的一雙,甚至不在意兩隻襪子是否一左一右,他卻很在意襪子...

洛谷P1494 國家集訓隊 小Z的襪子(莫隊)

從總的襪子數中任意選取 2 個作為分母,再從任意顏色相同的襪子數中選取 2 個,可以先與處理一下雖然資料量不大,但是預處理的時候會爆 int 累加答案的時候也會爆,所以採用 long long const int n 5e4 5 int i,j,k int n,m,t int a n int num...