NOIP提高組模擬賽7

2022-09-19 11:06:12 字數 997 閱讀 3135

帶取模的運算,除以乙個數一定要乘逆元!!!!!!!!!!!!!!!!!!

不同位置的值對最終答案的貢獻是互不影響的,分開考慮每個值的貢獻

考慮對於位於\((x,y)\)的值對\((n,m)\)的貢獻,無論從哪個路徑走過去,一定是原數\(*a^*b^\),而對答案貢獻多少次即為\((x,y)->(n,m)\)不同的路徑數,這個顯然是個組合數,用l表示需要走幾步,r表示需要向右(或下)走幾步,那麼方案數為\(c_l^r\),為了方便計算,我們從方案數唯一的開始算,這樣每次通過\(c_l^r\),求\(c_^\)只需要\(*(l+1)/(r+1)\)記得用逆元

#include#includeusing namespace std;

const int mod=998244353;

long long a,b;

long long x[300005],y[300005];

int n,m;

long long qp(long long x,long long y)

return ans;

}int main()

c=1,l=n-1,r=0,num=nn;

for(int i=m;i>=1;--i)

printf("%lld\n",ans);

return 0;

}

n個點,2n條邊,還是連通圖,那麼圖中有且只有乙個環,是一棵基環樹

如果將乙個y點和其黑白邊看成一條邊,可以省去y點,將黑白邊當作點權加到x點上,這樣仍然得到基環樹

其實問題已經可以轉化為在基環樹上任意相鄰兩點必須有乙個啟用,啟用費用為點權的最小花費

任意一條邊所連的兩點必然有乙個被啟用,我們考慮斷掉環上的一邊,轉化為普通的樹形dp,兩次dp分別啟用斷開的兩點,取個min即可

#include#includeusing namespace std;

int min(int x,int y)

int main()

NOIP提高組模擬賽3

周圍大佬都說初中打過n遍,我乙個菜雞瑟瑟發抖。把斐波那契數列寫出來找了半天性質,用了半個多小時推出來 x兔子的父親,就是x減去是在斐波那契數列中最大的小於x的數 舉個栗子 13號兔子,應減去8,得到他的祖先5 10號兔子,應減去8,得到他的祖先2 預處理出斐波那契數列,然後讓ab中較大的到他的祖先,...

NOIP提高組模擬賽4

丹青千秋釀,一醉解愁腸 無悔少年枉,只願壯志狂 矩陣字首和加暴力 o n 2m 2 60pts有手就行 觀察資料範圍,猜測應該是求一種 o n 3 的演算法,想到之前做的題,應該是 n 2 枚舉行,n 處理乙個序列的答案,然後,就沒有然後了 對於乙個序列,求子段和為k的倍數,如何 o n 求解,考慮...

NOIP提高組模擬賽6

這題看著真熟啊,好像把之前的english,入陣曲雜糅了一下。首先,像入陣曲一樣計算出字首和 s 式子可以轉化為求 s r s l 1 equiv max mod k 像english一樣 用單調棧處理出以x為最大值的區間,分區間求解 每次列舉一側區間,已知max,只要知道另一側有多少與之餘數相同的...