#
//一、當n mod 6 != 2 且 n mod 6 != 3時,有一個解為:
//
//2,4,6,8,...,n,1,3,5,7,...,n-1 (n為偶數)
//
//2,4,6,8,...,n-1,1,3,5,7,...,n (n為奇數)
//
//(上面序列第i個數為ai,表示在第i行ai列放一個皇后;... 省略的序列中,相鄰兩數以2遞增。下同)
//
//二、當n mod 6 == 2 或 n mod 6 == 3時,
//
//(當n為偶數,k=n/2;當n為奇數,k=(n-1)/2)
//
//k,k+2,k+4,...,n,2,4,...,k-2,k+3,k+5,...,n-1,1,3,5,...,k+1 (k為偶數,n為偶數)
//
//k,k+2,k+4,...,n-1,2,4,...,k-2,k+3,k+5,...,n-2,1,3,5,...,k+1,n (k為偶數,n為奇數)
//
//k,k+2,k+4,...,n-1,1,3,5,...,k-2,k+3,...,n,2,4,...,k+1 (k為奇數,n為偶數)
//
//k,k+2,k+4,...,n-2,1,3,5,...,k-2,k+3,...,n-1,2,4,...,k+1,n (k為奇數,n為奇數)
摘要: 很高興在完全沒有參考任何代碼的前提下通過此題,呵呵,就是代碼比較猥瑣,跑得也比較慢,2700MS,超過時限的一半了。此題應該還有繼續提升的空間,我想了想,insert函數和query其實是可以放在一起的。另外網上的方法用了反素數 這樣可以減少插入的次數,應該也能剪去一下時間。下次試試。^_^順便用此題做為POJ 500題紀念
#include<iostream>using ...
閱讀全文
關于擴展的卡特蘭數:
1.(n-m+1)/(n+1)*c(n+m,n)
2.c[n+m][n]-c[n+m][m-1]
Catalan,Eugene,Charles,卡特蘭(1814~1894)比利時數學家,生于布魯日(Brugge),早年在巴黎綜合工科學校就讀。1856年任列日(Liege)大學數學教授,并被選為比利時布魯塞爾科學院院士。
卡特蘭一生共發表200多種數學各領域的論著。在微分幾何中,他證明了下述所謂的卡特蘭定理:當一個直紋曲線是平面和一般的螺旋面時,他只能是實的極小曲面。他還和雅可比(Jacobi,C·G·J)同時解決了多重積分的變量替換問題,建立了有關的公式。
1842年,他提出了一種猜想:方程xz-yt=1沒有大于1的正整數解,除非平凡情形32-23=1。這一問題至今尚未解決。
(mathoe注:即除了8、9這兩個連續正整數都是正整數的方冪外,沒有其他。1962年我國數學家柯召以極其精湛的方法證明了不存在三個連續正整數,它們都是正整數的方冪,以及方程x2-yn=1,n>1,xy≠0無正整數解。并且還證明了如果卡特蘭猜想不成立,其最小的反例也得大于1016。)
此外,卡特蘭還在函數論、伯努利數和其他領域也做出了一定的貢獻。
卡特蘭通過解決凸n邊形的剖分得到了數列Cn。

凸n+2邊形用其n-1條對角線把此凸n+2邊形分割為互不重疊的三角形,這種分法的總數為Cn。
為紀念卡特蘭,人們使用“卡特蘭數”來命名這一數列。
據說有幾十種看上去毫不相干的組合計數問題的最終表達式都是卡特蘭數的形式。
卡特蘭數在數學競賽、信息學競賽、組合數學、計算機編程等都會有其不同側面的介紹。
前幾個卡特蘭數:規定C0=1,而
C1=1,C2=2,C3=5,C4=14,C5=42,
C6=132,C7=429,C8=1430,C9=4862,C10=16796,
C11=58786,C12=208012,C13=742900,C14=2674440,C15=9694845。
遞推公式

圓周上有標號為1,2,3,4,……,2n的共計2n個點,這2n個點配對可連成n條弦,且這些弦兩兩不相交的方式數為卡特蘭數Cn。
2003年浙江省小學數學夏令營競賽考了這個題:圓周上10個點可以連成既不相交,也沒有公共端點的5條線段,不同的連法共有_____種。
答:方法的種數是卡特蘭數C5=42,此題被收錄進單墫主編的知識出版社出版的《華數奧賽強化訓練》小學六年級冊的“計數問題”專題。

共六種類型,第1類有5種連法,第2類有2種連法,第3類有10種連法,第4類有10種連法,第5類有10種連法,第6類有5種連法。共有42種連法。
1994年《小學數學》有獎征答競賽:游樂園門票1元一張,每人限購一張。現在有10個小朋友排隊購票,其中5個小朋友每人只有1元的鈔票一張,另5個小朋友每人只有2元的鈔票一張,售票員沒有準備零錢。問:有多少種排隊方法,使售票員總能找的開零錢?
(此題也被許多奧數資料收錄為例題或習題,《華羅庚學校數學課本》小學六年級冊的思維訓練也收有此題)
答:現把拿1元的5個小朋友看成是相同的,把拿2元的5個小朋友也看成是相同的,使用我們常用的“逐點累加法”:
圖中每條小橫段表示拿1元的小朋友,每條小豎段表示拿2元的小朋友,要求從A走到B的過程中網格中任何點均有橫段數不小于豎段數:拿1元的要先,且人數不能少于拿2元的,即不能越過對角線AB:每個點所標的數即為從A走到此點的方法數。求從A到B的走法的方法數。逐點累加可求出為42,即卡特蘭數C5=42。

又由于每個小朋友是不相同的,所以共有42×5!×5!=42×120×120=604800種情況。
若把此題的10個人,拿1元的有5人,拿2元的有5人改為共有2n個人,拿1元的n人,拿2元的n人,則符合要求的排隊方法數為:

再一個卡特蘭數的例子:
甲乙兩人比賽乒乓球,最后結果為20∶20,問比賽過程中甲始終領先乙的計分情形的種數。
即甲在得到1分到19分的過程中始終領先乙,其種數是卡特蘭數

再一個卡特蘭數的例子
飯后,姐姐洗碗,妹妹把姐姐洗過的碗一個一個放進碗櫥摞成一摞。一共有n個不同的碗,洗前也是摞成一摞的,也許因為小妹貪玩而使碗拿進碗櫥不及時,姐姐則把洗過的碗摞在旁邊,問:小妹摞起的碗有多少種可能的方式?
答:得數是第n個卡特蘭數Cn。
再一個卡特蘭數的例子
一個汽車隊在狹窄的路面上行駛,不得超車,但可以進入一個死胡同去加油,然后再插隊行駛,共有n輛汽車,問共有多少種不同的方式使得車隊開出城去?
答:得數是第n個卡特蘭數Cn。
卡特蘭數

求證:卡特蘭數Cn是整數。
證明:
①取整函數不等式:對任意實數x,y有[x+y]≥[x]+[y]。這里[x]表示不大于實數x的最大整數。
解:由定義x≥[x]……(1)
y≥[y]……(2)以上兩式相加,得:x+y≥[x]+[y],
把上式再取整,得:[x+y]≥[[x]+[y]]=[x]+[y],即[x+y]≥[x]+[y]。
②1000!的末尾0的個數249個。(現在有的小學奧數書上出現了100!末尾有幾個零的題目:24個)
解:1000÷5=200,
200÷5=40,
40÷5=8,
8÷5=1……3
以上各商相加,即得1000!末尾0的個數=200+40+8+1=249個。
③n!的質因數分解式中質因子p的冪次數:
…………(1)
k!的質因數分解式中質因子p的冪次數
…………(2)
(n-k)!的質因數分解式中質因子p的冪次數
…………(3)
這里寫成西格馬求和式時使用了無窮的形式,但是從某一確定項之后的每項都是0,為了統一,都寫成了“∞”形式。
④組合數是整數
解:
⑤卡特蘭數是整數
⑥卡特蘭數是整數的另外一個證明
④組合數是整數


⑤卡特蘭數是整數

⑥卡特蘭數是整數的另一個證明

凸六邊形剖分成三角形的14種方法,是卡特蘭數C4

從左下角(0,0)走到右上角(4,4),只允許向上、向右走,但不允許穿過對角線的方法數是14種,是卡特蘭數C4
1936第40屆匈牙利奧林匹克數學競賽 第1題考了Catalan恒等式的證明。
1979第21屆國際數學奧林匹克 第1題考了一個卡特蘭恒等式的應用的題目



此題由1989年第1屆匈牙利-以色列數學競賽題改編。
轉自:
http://www.mathoe.com/dispbbs.asp?boardid=89&replyid=46004&id=34522&page=1&skin=0&Star=2
問題
《編程之美》中提到了“買票找零”問題,查閱了下資料,此問題和卡特蘭數 Cn有關,其定義如下:
卡特蘭數真是一個神奇的數字,很多組合問題的數量都和它有關系,例如:
一.Cn= 長度為 2n的 Dyck words的數量。 Dyck words是由 n個 X和 n個 Y組成的字符串,并且從左往右數, Y的數量不超過 X,例如長度為 6的 Dyck words為:
XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY
二.Cn= n對括號正確匹配組成的字符串數,例如 3對括號能夠組成:
((())) ()(()) ()()() (())() (()())
三.Cn= n+1個數相乘,所有的括號方案數。例如, 4個數相乘的括號方案為:
((ab)c)d (a(bc))d (ab)(cd) a((bc)d) a(b(cd))
\四.Cn= 擁有 n+1 個葉子節點的二叉樹的數量。例如 4個葉子節點的所有二叉樹形態:

五.Cn=n*n的方格地圖中,從一個角到另外一個角,不跨越對角線的路徑數,例如, 4×4方格地圖中的路徑有:

六.Cn= n+2條邊的多邊形,能被分割成三角形的方案數,例如 6邊型的分割方案有:

七.Cn= 圓桌周圍有 2n個人,他們兩兩握手,但沒有交叉的方案數。
在《Enumerative Combinatorics》一書中,竟然提到了多達 66種組合問題和卡特蘭數有關。
摘要: A 就是分數化簡注意一下就好,gcdB.暴力,1個trick , 當時間相同時要求的是 到學校距離最小的那個站
#include<iostream>#include<cmath>using namespace std;struct point{ double x; ...
閱讀全文
摘要: 之前想進行hash,發現思路非常麻煩。索性來個一一對應,找到第一個M后,掃描所有52個字母,一個字母正反各算一次,找準基準點后,用一張7*16的圖進行覆蓋,整張圖要完全一一對應。 為了避免附近字母的干擾,先做一遍深搜,只對深搜搜過的點進行對應,其他的不管。
#include<iostream>using namespace std;char s[26][...
閱讀全文
題意嚴重不明,開始還以為是頂點按順序形成環,WA了N次之后改了算法才過的。。。
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;


int n,m;
int v[100][100];
int d[100];

int f[1000];
int r[1000];
int find(int n)


{
if(f[n]==n)
return n;
else
f[n]=find(f[n]);
return f[n];
}


int Union(int x,int y)


{
int a=find(x);
int b=find(y);
if(a==b)
return 0;
else if(r[a]<=r[b])

{
f[a]=b;
r[b]+=r[a];
}
else

{
f[b]=a;
r[a]+=r[b];
}
return 1;

}

int main()


{

while(scanf("%d%d",&n,&m)!=EOF)

{

int flag=0;
memset(d,0,sizeof(d));
int i,j;
for(i=0;i<n;i++)

{

f[i]=i;
r[i]=1;
}
for(i=1;i<=m;i++)

{
int a,b;
scanf("%d%d",&a,&b);
Union(a,b);
d[a]++;
d[b]++;
}
int tt=find(1);
if(r[tt]!=n)

{

printf("NO\n");
continue;
}

if(n!=m||n<3)

{
printf("NO\n");
continue;
}
for(i=1;i<=n;i++)

{

if(d[i]!=2)

{
flag=1;
break;
}
}
if(flag)
printf("NO\n");
else
printf("YES\n");

}
return 0;
}