模擬賽 circle 題解

2021-10-05 19:02:15 字數 779 閱讀 5782

題意:有n個數,問有多少個x,\((x\leq t)\),滿足這n個數分別+x後,異或和為s。每個數小於\(2^m\)。

數字dp。

由於是加法,需要記錄進製,因此從低位到高位dp。

只要記錄下有幾個進製,就可以根據這n的數的大小知道究竟是哪幾個進製了。

設\(dp(i,j,0/1)\)表示考慮到第i位,有j個進製,與t的大小關係為0/1的方案數。

可以提前預處理出轉移,即\(g(i,j,0/1)\)表示考慮到第i位,有j個進製,當前位使用\(0/1\)造成的進製數。

時間複雜度\(o(nmlogn)\)(有排序),可以優化至\(o(nm)\)。

**(未經優化):

#include #include #define ll long long

struct spx

;spx px[52][100010];

ll sz[100010],dp[52][100010][2];

int sl[52][100010][2],tm[100010],ss[52];

int sgn(ll x)

int cmp(const void*a,const void*b)

ll solve(int m,int n,ll s,ll t)

} sl[0][0][0]=0;

for(int i=0;isl[0][0][1]+=(sz[i]%2);

printf("%lld",work(m,n,s,t));

return 0;

}

模擬賽2 題解

這次模擬賽最後一道是提答題,就不寫題解了。orz這題 emmm,我無話可說。小範圍記憶化,大範圍遞迴求解 複雜度 o k sqrt 記 f i,j 表示前 j 個數中不被 a i,a dots,a n 整除的個數,答案即為 f 1,n 狀態轉移方程為 f i,j f i 1,j f i 1,j a ...

2020 10 08 模擬賽 題解

期望100 實際100 老師說是結論題。其實可以直接打表,t i 表示0 63中有t i 對數與起來等於i,然後乘法原理即可。沒什麼難度。include include using namespace std const int maxn 100005 const int mod 1e9 7 cha...

2021 02 10 模擬賽題解

比較水,就不說了。就是暴力優化,不知道複雜度為哈對,也過不了,就不放了。考慮暴力,即每次每個點向可以一波傳染的點連邊,然後縮點,求無入度的點數即可。考慮優化,你發現對於兩個點可以在點分樹上乙個點考慮先走到該點再到另乙個點,所以我們可以直接澱粉質,然後雙指標拆點連邊即可。include using n...