DP? hihocoder1526 序列的值

2021-08-14 16:02:20 字數 1024 閱讀 1331

給定乙個長度為 n 的序列 a[1..n],定義函式 f(b[1..m]) 的值為在 [0,m-1] 內滿足如下條件的 i 的數目:

b 中前 i 個數異或起來的值小於 b 中前 i +1個數異或起來的值。

對於 a[1..n] 的每個子串行 b[1..m],求f(b[1..m])之和。

我們換一種思路:

設x為a

i 前的某些值的異或和,那麼當:x<

xxor

ai時,就可以將i算入答案。

考慮二進位制下ai

中最高位的1,此時若那一位x為0,則一定滿足條件,若那一位x為1,則一定不滿足。所以我們僅通過ai

中最高位那個1,就可以確定答案了。所以用dp

(i,j

,k)(

k=0或

1)表示前i個數中,任意組合進行異或,使得第j位為k的方案數。將這個方案數再乘以2n

−i即可(包涵此字首的所有子串行均會計算)。

#include

#include

#include

#include

#define sf scanf

#define pf printf

#define maxn 100010

#define mod 998244353

using namespace std;

long long dp[40][2],ans,bits[maxn];

int n,x;

int main()

//pf("----",n-i-1);

//pf("[%lld (%d)]\n",dp[tag][0],tag);

ans+=(1ll*dp[tag][0]*bits[n-i-1])%mod;

ans%=mod;

}for(int j=0;j<31;j++)

else

}//pf("[%d]",ans);

now^=1;

}pf("%lld",ans);

}

數字DP hihoCoder 1033 交錯和

hihocoder 1033 給定乙個數 x,設它十進位制展從高位到低位上的數字依次是 a0,a 1,a n 1 定義交錯和函式 f x a0 a1 a2 1 n 1 an 1 例如 f 3214567 3 2 1 4 5 6 7 4 給定 輸入資料僅一行包含三個整數,l,r,k 0 l r 101...

1526 宗教信仰

總時間限制 5000ms 記憶體限制 65536kb 描述 世界上有許多宗教,你感興趣的是你學校裡的同學信仰多少種宗教。你的學校有n名學生 0 n 50000 你不太可能詢問每個人的宗教信仰,因為他們不太願意透露。但是當你同時找到2名學生,他們卻願意告訴你他們是否信仰同一宗教,你可以通過很多這樣的詢...

15 26 微服務安全解決方案

restful 的通訊安全有很多中解決方案,例如 http basic auth 認證 cooke session 認證 token 認證 oauth openid 等等,每一種方案都很成熟,這裡不依依解釋,如果不了解,請去搜尋引擎查詢相關資料。這裡我談談在實施微服務專案中的心得,首先專案採用 sp...