構造神題,
對於每乙個不含質因數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...