容斥定理和並集計算

2021-06-21 15:03:29 字數 965 閱讀 1461

/*        容斥原理與病機計算

先不考慮重疊的情況,計算出所有被並集合的元素數;

然後再計數時重複計算的元素排斥出去,使得計算的結果

既無遺漏又無重複,這種計算方法稱為容斥定理。

也叫做排斥原理。

主要圍繞下述兩個問題展開容斥原理的應用實驗:

1、計算排錯的方案

2、計算並集的元素個數

*//* 1.計算並集的元素個數

容斥定理1:|a∪b|=|a|+|b|-|a∩b|;

容斥定理2:|a∪b∪c|=|a|+|b|+|c|-|a∩b|-|b∩c|-|a∩c|+|a∩b∩c|;

*//*例題:你要找到k個不同數字組成的集合的數目,使這些數有乙個大於1,

的公約數,並且所有的數字都不能大於乙個給定的數字s,當然,這樣集合的數量。

輸入:k和s(2<=k<=s<<50;;輸出:最大可能數量;如果這個數大於10000,輸出10000

思路:順序列舉[2..s]中的每個數i;

if(i為質數) ans+=c([(s-i)/i+1],k);

else if(i為兩個不同質數的積) ans-=c([(s-i)/i+1],k)

*/#include#include#includeusing namespace std;

int prime[60];//素數

int k,s;

__int64 c[60][60];//c(n.m)

void cal_prime()

}void cal_number()

}inline bool pxp(int a)

return false;

}int work()

else if(pxp(i))

}return ans>1000?10000:ans;

}int main()

具體容斥原理可連線連線:

Cheerleaders(容斥定理)

題意 在乙個m行n列的矩陣裡站k個拉拉隊員,問有多少種方法,四周邊界必須有乙個隊員.這裡用到組合數加容斥定理,將重複的刪除,第一行,最後一行,第一列,最後一列.用到位運算來模擬16種情況.這裡要吐槽一下,中英文輸入法,和case中c的大小寫,wrong了無數次,最後才發現,蛋疼.include in...

Snake Rana (容斥定理)

snake rana gym 101350g 題目大意 給定乙個矩陣,和矩陣中的一些點,求矩陣中不包含這些點的子矩陣的數量 容斥原理 並集 總情況 兩個集合相交的情況情況 三個集合相交的情況 四個集合相交的情況 五個集合相交的情況 依次類推 include include using namespa...

容斥定理專題

介紹 co prime hdu 4135 用位運算生成所有可能 include include using namespace std typedef long long ll const int n 1e3 5 ll a,b,n int num ll fac n void factor if tn...