日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷 - P2181 - 对角线 - 打表 - 组合数学

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 - P2181 - 对角线 - 打表 - 组合数学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.luogu.org/problemnew/show/P2181

對于某條對角線,除去從兩端出發的對角線,其他的都與它有1個交點。

每個點有(n-3)條對角線,每條對角線和其余C(n-2,2)條對角線都有1個交點,共有n個點,重復計算交點再除以2,重復計算直線再除以2。

即n(n-3)/2條對角線,每條對角線和(n-2)(n-3)/2條對角線都有1個交點,重復計算交點再除以2。(錯了,并非所有對角線都相交


畫圖手數,按規律數的話,發現n=4,1個交點;n=5,5個交點=sum(1,2)+2sum(1,1);n=6,15個交點=sum(1,3)+2sum(1,2)+3sum(1,1);n=7,35個交點=sum(1,4)+2sum(1,3)+3sum(1,2)+4sum(1,1)。

所以我們首先得到一個n復雜度的解法。利用這個解法打表看看。

#include<bits/stdc++.h> using namespace std; #define ll long longll sum(ll a1,ll an){return (an-a1+1)*(a1+an)/2; }int main(){for(int n=3;n<=20;n++){ll ans=0;for(int i=1;i<=n-3;i++){ans+=1ll*i*sum(1,n-2-i);}printf("n=%d ans=%lld\n",n,ans);}} n=3 ans=0 n=4 ans=1 n=5 ans=5 n=6 ans=15 n=7 ans=35 n=8 ans=70 n=9 ans=126 n=10 ans=210 n=11 ans=330 n=12 ans=495 n=13 ans=715 n=14 ans=1001 n=15 ans=1365 n=16 ans=1820 n=17 ans=2380 n=18 ans=3060 n=19 ans=3876 n=20 ans=4845

再試試大點的會不會爆,結果看不太出來,用ull和ll的結果沒啥不同,賭他不溢出。

#include<bits/stdc++.h> using namespace std; #define ll long longunsigned ll sum(ll a1,ll an){return (an-a1+1)*(a1+an)/2; }int main(){int n;scanf("%d",&n);//for(int n=99999;n<=100000;n++){unsigned ll ans=0;for(int i=1;i<=n-3;i++){ans+=1llu*i*sum(1,n-2-i);}//printf("n=%d ans=%llu\n",n,ans);printf("%llu\n",ans);//} }

事實證明是沒有溢出。所以上面是正確的解法。

這道題還有用公式的解法,降低了一個維度。除了用組合數學的知識直接得到(4個不同的點確定一個交點,直接C(n,4)),還可以暴力求解,這里介紹一下高階差分。

首先我們由打表代碼得到

0 1 5 15 35 70 126

一階差分

1 4 10 20 35 56

二階差分

3 6 10 15 21

三階差分

3 4 5 6

四階差分

1 1 1

五階差分

0 0

所以上式是一個關于n的四次多項式。設為an^4+bn^3+cn^2+dn+e=0。

代入前5項強行算出來吧。還是說有別的計算方法?

的確有!(差分數列只要得到等差數列即可)

寫出差分表之后,差分表的每行第0項組成第0對角線,即c0,c1,c2,c3,0,0,0...。原序列的通項滿足

hn=c0C(n,0)+c1C(n,1)+c2C(n,2)+c3C(n,3),利用這個形式甚至可以求出前n項和。(組合數的求和sum(k=0~n,C(k,p))=C(k+1,p+1))


參考https://blog.csdn.net/wu_tongtong/article/details/79115921

?

轉載于:https://www.cnblogs.com/Yinku/p/10328616.html

總結

以上是生活随笔為你收集整理的洛谷 - P2181 - 对角线 - 打表 - 组合数学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。