給定乙個長度為 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...