BZOJ 3823 定情信物 遞推

2021-06-27 21:54:38 字數 1038 閱讀 6743

題目大意:定義點為零維元素,線為一維元素,面為二維元素,空間為三維元素,以此類推,求n維立方體中各維元素都有多少

令f[i][j]為i維立方體內j維元素的個數

考慮n維立方體中的i維元素,將n維立方體拓展至n+1維空間時(覺得抽象的可以想象平面擴充套件成立方體)

原先的i維元素增加了一倍,同時原先的i-1維元素變為了i維元素

故有f[i][j]=f[i-1][j]*2+f[i-1][j-1]

經過一系列的推導(我不會怎麼推,我是打表之後斜著找規律的),可以得到f[i][j]=2^(i-j)*c(i,j)

然後就有f[n][i]=f[n][i+1]*2*(i+1)/(n-i) 線性求出逆元 從後往前推即可

update:尼瑪誰這麼蛋疼加強了資料- -||| 加強後的資料出現了n>=p的情況(其實這個題本來是n對當前的值記錄p的次數 乘或除乙個數的時候對次數進行加減 異或的時候如果次數不為零則異或0

時間複雜度不對啊- - 不管了能卡過去

#include #include #include #include #define m 10001000

using namespace std;

long long inv[m],ans=1;

int n,p;

struct long_long

void operator *= (long long x)

void operator /= (long long x)

};void linear_shaker()

{ int i;

inv[1]=1;

for(i=2;i<=n&&i>n>>p;

linear_shaker();

for(i=n-1;~i;i--)

{temp*=static_cast(i+1<<1);

temp/=static_cast(n-i);

ans^=temp.pow?0:temp.left;

//cout<<(temp.pow?0:temp.left)<

專案38 2 打豆豆

任務和 設計乙個程式,能重複地在顯示下面的資訊 1.吃飯 2.睡覺 3.打豆豆 0.退出 請選擇 0 3 根據使用者輸入的選項,輸出一句提示性的話語 將來會對應實現某個功能 輸入0,則退出。檔名 main.c 完成日期 2015.10.15 問題描述 設計乙個程式,能重複地在顯示下面的資訊 1.吃飯...

382 鍊錶隨機節點

382.鍊錶隨機節點 給定乙個單鏈表,隨機選擇鍊錶的乙個節點,並返回相應的節點值。保證每個節點被選的概率一樣。高階 如果鍊錶十分大且長度未知,如何解決這個問題?你能否使用常數級空間複雜度實現?示例 初始化乙個單鏈表 1,2,3 listnode head new listnode 1 head.ne...

382 鍊錶隨機節點

原理參考 蓄水池抽樣 程式設計珠璣 讀書筆記 思路 以1 m的概率選擇第m個物件 思路 高階 如果鍊錶十分大且長度未知,如何解決這個問題?你能否使用常數級空間複雜度實現?class solution def init self,head listnode self.head head defgetr...