集合選數題解

2022-08-26 21:57:29 字數 783 閱讀 7298

構造神題,

對於每乙個不含質因數2和3的數字,

我們構造乙個矩陣(可能並不滿),

第一行第一列是這個數,

在同一行中,下一列的數是這一列的數的2倍,

在同一列中,下一行的數是這一行的數的3倍。

如果我們選矩陣中乙個數,

則右邊的數是這個數的兩倍而不能選,

同理,下面的數同樣不能選,

不能選左邊的數,因為這個數是它的兩倍,

不能選上面的數,因為這個數是它的三倍,

總結一下:

選了乙個數就不能選相鄰的數,

再一看,列數<=\(log_(n)<17\),行數<=\(log_(n)<11\)

所以,狀壓啦:

每個不同的矩陣互不影響,根據乘法原理:每次得到的方案數之積即為答案。

**:

#include#define ll long long 

using namespace std;

const int n=4098,m=20,k=100006;

const ll mod=1e9+1;

int n,p,flag[n],book[k],num[m],f[m][n];

ll ans=1,sum;

inline int read()

while(ch>='0'&&ch<='9') t=(t<<3)+(t<<1)+(ch-48),ch=getchar();

return f*t;

}void build(int x)

int main()

題解 HNOI2012 集合選數

題目傳送門 直接看題面吧。感覺挺水的一道題啊?怎麼評到紫色的啊?考試的時候ljs出了這個題的加強版我就只想出這個思路,然後就爆了。不難發現,我們可以構造矩陣 x 2x 4x 6x 3x 6x 12x 24x 48x 9x 18x 36x 然後實際上就相當於在這個矩陣中選出一些數使得兩兩不相鄰。因為行...

集合選數 HNOI2012

問題描述 集合論與圖論 這門課程有一道作業題,要求同學們求出的所有滿足以 下條件的子集 若 x 在該子集中,則 2x 和 3x 不能在該子集中。同學們不喜歡這種具有列舉性質的題目,於是把它變成了以下問題 對於任意乙個正整數 n le100000 如何求出 的滿足上述約束條件的子集的個數 只需輸出對 ...

P1036 選數 題解

題目鏈結 已知 nn n 個整數 x1,x2,xnx 1,x 2,x nx1 x2 xn 以及 11 1 個整數 kk k k k n 從 nn n 個整數中任選 kk k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3n 4,k 3n 4,k 3 44 4 個整數分別為 3,7,12,1...