BestCoder Round 40 解題報告

2022-08-09 01:03:12 字數 4250 閱讀 5002

這場是第一場沒有公尺的bc...

大概也是想震一震那些一聽說沒公尺了就不打bc的人吧

這次的題目質量比以往高了許多

(然而我並沒有打這一場bc

但是今天下午到現在做的過程中真的學到了不少知識呢

a題略水...

1 #include2 #include3 #include4 #include5

intt,n;

6int

main()

14return0;

15 }

然而第二題就不是非常簡單的呢...

開始啊..我打算數字dp搞搞,然而突然發現排列是不能有重複數字的啊...

想到乙個容易入手的狀態 也就解決了這道題

我們需要讓這些排列都小於讀進來的排列

然後思考一下這些排列都有什麼共性呢?

顯然一定是由一段與排列相同的數字組成的字首構成的,而接下來的一位一定小於排列,剩下的就隨意了

這麼一來好像問題就迎刃而解了

列舉與原串相同的位數(0~n-1),以及接下來一位的數字(小於原串該位置上的數字且在前面的位置中沒出現過)

設當前列舉的黃色部分的位置為i,那麼顯然這樣的字串有(n-i)!種(即後面藍色部分的n-i個數字的全排列)

這些字串對答案的貢獻分幾部分考慮

1)紅色部分內部的逆序對*(n-i)!,原串所有的字首的逆序對數量可以通過樹狀陣列預處理出

2)紅色部分與黃色+藍色部分的逆序對數,

可以用樹狀陣列維護黃色+藍色部分的值(即每向後走一格就將前乙個數從樹狀陣列中刪去)

然後列舉紅色部分的每乙個元素,統計逆序對數,最後乘上(n-i)!

3)黃色部分與藍色部分的逆序對數,直接與紅色部分一樣的答案最後-1即可(即把自己與自己減掉),

當然get的時候傳參改成數值-1也是可以的

4)藍色部分的逆序對數,這個在(n-i)!個字串中都是不一樣的,於是我們可以考慮總數

對於乙個n個數的排列,我們考慮其中的兩個數,它們成為逆序對的次數為c(n,2)*(n-2)!

所以逆序對總數為c(n,2)^2*(n-2)!

然後這道題就做完了,但是卻對拍了乙個下午都沒找出**寫錯...

最後寫兩點做題過程中積累的東西吧...

1)c++的陣列和pas畢竟不一樣...賦值啊什麼的不能頂到maxn..而且居然本地不會出現re

2)while not eof do 在c++裡是以很奇怪的方式替代的呢...

1 #include2 #include3 #include4 #include5 #include6

#define tt 1000000007

7#define maxn 110

8#define ll long long

9using

namespace

std;

10int

n,a[maxn],tr[maxn];

11ll w[maxn],p[maxn],b[maxn];

12bool

used[maxn];

13int

get(int

x)18

void put(int x,int

y)21

void

build()27}

28void

solve()43}

44 cout

46int

main()

52return0;

53 }

濃濃的數學味...於是又得去補充幾個知識了呢首先帶取模的組合數是不能直接求解的...因為一旦c(n,m)中假設n>模數p,n!中就會出現p這個因子

然後c(n,m)就不可避地計算出了0...

這個時候要用到lucas定理,遞迴定義

1 ll lucas(int n,int

m)

另乙個就是連續的組合數快速求解...剛開始我一直在尋找同一行之間的關係..因為畢竟之前如果是整行是可以直接算的然而實際上列存在著一定的關係

我們考慮這樣一列上連續一段的求解(如圖中紅色部分)

根據楊輝三角的構造方法,c(n,m)=c(n-1,m)+c(n-1,m-1)

我們設4號格仔的位置為(i,a)

最頂端紅色格仔的位置為(i,b)

c(a+1,i+1)=c(a,i)+c(a,i+1) → c(a,i)=c(a+1,i+1)-c(a,i+1)

顯然...sigma(c(i,j))(a<=j<=b)=c(a+1,i+1)-c(b,i+1)

在圖中也就是橙色格仔-藍色格仔

然後對於每一列求解就可以了,但是要注意可能a,b不是真正的a,b

因為我們現在考慮的是建立在紅色部分都至少為1的基礎上的,於是對於每一列都要對行標號進行處理

另外還要注意,即使實際代表意義上不可能但取模意義下的減法可能會減出負的,也要處理

1 #include2 #include3 #include4

#define maxn 100010

5#define ll long long

6int

x1,y1,x2,y2,tt;

7ll fac[maxn],inv[maxn];

8int max(int a,int

b)12

ll mul(ll a,ll b)

18return

ans;19}

20void

build()

24 ll c(int n,int

m)27 ll lucas(int n,int

m)32 ll query(int n,int

m)36

void

solve()

42 ans=(ans+query(r+1,i+1)-query(l,i+1)+tt)%tt; 43}

44 printf("

%lld\n

",ans);45}

46int

main()

52return0;

53 }

Bestcoder round 32 解題報告

按照題目要求寫出cmp函式,sort一下就行了。include include include include include include using namespace std struct node a 1100000 int n int cmp node a,node b sort a,a...

BestCoder Round 1 解題報告

最近聽到splay學長說有乙個 叫bestcoder,題目質量挺不錯,而且難度在noip提高組水平,比較適合我刷 重點是不像cf那樣要翻牆,深夜打比賽,而且它還支援在hdu上提交 於是我有空跑過去看了看,見到只有6頁比賽嘛,於是決定從頭開始做 但願暑假能刷完吧。題目傳送門 題目分析 剛開啟這題就見到...

小公尺電視4a4c4x4s的區別

小公尺電視4a 55英吋延續了小公尺電視以往的簡約時尚風格英吋,採用黑色色彩為主,看起來經典又百搭 搭配64位四核處理器,配置2gb 8gb大儲存 搭載第6代畫質引擎,相比上一代有4處公升級,同步支援hdr10和hybrid log gamma。提供了更多的動態範圍和影象細節,使得暗部更暗,亮部更亮...