省隊集訓DAY3

2021-08-01 21:27:59 字數 2331 閱讀 9940

一共要使用六根木棍,那麼分割的方法就兩種,

那麼關鍵就是要計算2,3的數量。

cnt1[i]表示每種長度的木棍的方案數

cnt2[i]最初表示用不同的木棍拼成長度為i邊的方案數,後來表示選出四根木棍構成的方案數。

cnt22[i]表示用兩個長度相同的不同木棍拼成長度為i的邊的方案數。

cnt3[i]表示用三根不同的木棍拼成長度為i的方案數。

考慮兩個的情況,我們可以o(

n2) 的列舉兩個不同的木棍,然後用cnt2[a[i]+a[j]]的答案。

關鍵是怎麼求cnt3,cnt2.

(1)cnt3

考慮cnt3的組成列舉cnt1超過3的長度sum,然後列舉每一根單獨的木棍,設長度為x。

因為cnt2中保證了兩個木棍是不同的,所以只需要考慮減去列舉到的木棍計入了cnt2的情況,不合法的情況就是cnt1[sum-2*x]。還有一種特殊情況需要注意su

m=3∗

x ,這樣子cnt1[sum-2*x]中包含了x所以還需要-1.

這樣計算相當於(x,y,z)三元組在列舉到x,y,z的時候都會計算一遍。所以最後的和要/3

(2)cnt2

組成情況比較複雜,首先列舉兩根木棍形成的長度

1.先考慮最簡單的,選中的四根木棍的長度相同,貢獻是c(

cnt1

[sum

∗2/4

],4)

2.(x,y,z,z)這種情況也比較好計算,答案是是(c

nt2[

sum]

−cnt

22[su

m])∗

cnt22

[sum

] 會不會出現(x,z,z,z),不會啊如果那樣的話x=z,同第一種情況

3.(x,y,x,y)中情況等價於從c(

cnt1

[x],

2)∗c

(cnt

1[y]

,2)

4.(x,y,z,k)我們列舉sum=x+y,列舉x(這裡列舉的是長度,不再是木棍)。可以確定二元組(x,y)。要求(z,k)與(x,y)不同且z!=k。答案是(c

nt2[

sum]

−cnt

22[su

m]−c

nt1[

x]∗c

nt1[

y])∗

cnt1

[x]∗

cnt1

[y] 。這種情況列舉到(x,y),(z,k)都會計算,所以最後要/2.

#include

#include

#include

#include

#include

#define n 10000003

#define ll long long

#define m 100003

using namespace std;

int n,a[m];

ll cnt1[n],cnt2[n],cnt22[n],cnt3[n],c1[n];

intq[m],m,q1[m],m1;

ll c(int

x,int

y)int main()

for (int i=1;i<=n;i++)

for (int j=i+1;j<=n;j++)

if (a[i]+a[j]<=mx)

for (int i=1;i<=mx;i++) c1[i]=c(cnt1[i],2);

for (int i=1;i<=mx;i++)

if (cnt1[i]>=3) q[++m]=i;

for (int i=1;i<=mx;i++)

if (cnt1[i]) q1[++m1]=i;

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

cnt3[sum]+=(ll)cnt/3;

}m=0;

for (int i=1;i<=mx;i++)

if(cnt1[i]>=2) q[++m]=i;

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

cnt2[x]+=sum/2;

if (x

*2%4==0) cnt2[x]+=c(cnt1[x

*2/4],4);

cnt2[x]+=(ll)cnt22[x]*t;

} ll ans=0;

for (int i=1;i<=m1;i++)

printf("%i64d\n",ans);

}

北京集訓DAY3

消去合法的序列 剩下的不合法序列一定是 3兩種括號個數各加1除2 手算一下即可4 5 include 6 include 7 include 8 9const int maxn 100010 10 11int len,top,cnt 1213 char s maxn 1415 inthh 25int...

省隊集訓Round2 DAY3

用splay維護權值有序。每次加入乙個人,貪心的選出前i 1個人中要求最小的vi 1,判斷能否滿足,如果能滿足就把這vi 1個人的權值 1,剩下的人不需要他們的支援,那麼都賦值成0,並且把這些點移動到平衡樹中0所在的位置 如果不能滿足就直接在平衡樹中加入乙個 1.要求每乙個時間每條邊只能有乙個人經過...

省隊集訓Round3 DAY4

講序列分成三部分,大根堆,緩衝區s,小根堆。任意時刻保證mid在緩衝區中,並且盡量保證大根堆和小根堆的大小盡量相等。均攤時間複雜度為o 首先打表發現sg函式的規律。1 p為奇數,從0開始sg值01迴圈 要統計區間的答案其實就是統計區間中sg值為1的數的個數。用線段樹維護區間中偶數 奇數的個數其實就是...