牛客提高D6t2 破碎的序列

2022-04-30 06:45:08 字數 1091 閱讀 3944

分析

我們不難發現對於偶數的情況只要相鄰兩個數不相等即可

而對於奇數的情況只要中間恰好隔乙個數的兩個數不相等即可

於是我們又dp[i][0/1]表示考慮到第i位,這一位和它後面離它最近的乙個確定的數是否相等

每次從i-1轉移即可

注意對於奇數的情況最終答案要n-1和n的dp值相乘以保證合法

**

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int mod = 998244353

;int dp[200100][2],a[200100],b[200100

],n,m,k;

intmain()

else

if(a[1

])else

for(i=2;i<=n;i++)

if(a[i]&&a[i]==b[i])

else

if(a[i])

else

printf(

"%d\n

",(dp[n][0]+dp[n][1])%mod);

}else

else

if(a[i])

else

}for(i=3;i<=n;i++)

if(a[i]&&a[i]==b[i])

else

if(a[i])

else

printf(

"%d\n

",1ll*((dp[n][0]+dp[n][1])%mod)*((dp[n-1][0]+dp[n-1][1])%mod)%mod);

}return0;

}

嵊州D6T2 城市 city

眾所周知,why 是czyz 王國的國王。czyz 王國一共有n 個城市,每個城市都有一條道路連向乙個城市 可能連向這個城市自己 同時,對於每乙個城市,也只有一條道路連向它。如果乙個人可以通過道路可以從城市x 走向城市y,那麼我們稱 x,y 這 個數對是滿足條件的。x 可以等於y 現在why 可以選...

牛客提高D3t2 點與面

分析 對於每乙個點只要維護它前面 後面的一小一大組合的數量 對於這個可以維護兩個樹狀陣列 然後從前往後 從後往前分別掃一遍相乘即可 include include include include include include include include include include incl...

牛客提高D1t2 最小生成鏈

分析 我們發現可以把題目轉化為 有乙個序列a,問它的排列中相鄰兩個值異或的最大值的最小值 我們發現序列的構成一定是前幾位全是一樣的 從某一位開始左面全是0右面全是1 所以只要找到一種方案是的交界兩個值異或最小即可 把是0的插入01trie,每次拿是1的查詢異或最小值 include include ...