TC srm518 Nim 動態規劃 FWT

2021-08-14 03:08:51 字數 894 閱讀 6706

題目大意:

求符合以下條件的序列個數:

1:長度為k

2:每個元素大小不超過l

3:每個數都是質數

4:所有數異或和為0 k≤

109,l

≤50000

答案對109

+7取模;

解題思路:

我們設f[i][j]表示序列長度為i,異或和為j的方案數,那麼

f[i][x ^ y]=f[i-1][x] * f[1][y]。

可以發現這個式子是符合fwt卷積的,所以我們設i維向量ai

表示f[i],其中a1

裡素數處為1,其餘為0,那麼ai

就是把a1

做i次fwt得到的

本來應該分治fwt做到o(

llog

2llo

g2k)

,但由於每次乘的都是a1

,所以可以先對a1

fwt求最終長度的tf

(a1)

,然後直接快速冪求tf

(a1)

的k次方,再ufwt即可,答案即為第0項。

時間複雜度為o(

llog

2l+l

log2

k)

不會fwt的可以看一看

裡面有講解和模板。

#include

using namespace std;

const int n=50005,p=1e9+7;

int n,k,len,inv,a[1

<<16];

int ksm(int

x,int

y)void fwt()

}void ufwt()

}int main()

TC SRM568,奇妙的題目

這道題一開始的想法是瞎貪心一波,建張圖出來,然後跑帶花樹,看看是否有完美匹配。描述一下如何建圖,首先貪心,如果連線乙個已知點對的半圓方向能向上就向上,否則向下。再引入乙個概念,對於乙個未確定點 p 定義f d,p 為d方向上覆蓋了這個點的半圓集合。考慮存在乙個方向dx 使得f dx,p 1 等於f ...

MCS 51 A51 程式跑飛怪相

程式跑飛怪相 1.跑飛的程式 昨天凌晨寫了個程式,太晚就睡了。昨天早晨9點多鐘的時候,除錯程式居然發現程式跑飛了。跑飛程式部分 如下 tleft mov 1000h,006h 迴圈次數 mov a,1001h push acc lloop setb p1.2 pop acc mov p0,a clr...

51微控制器與C51

微控制器又稱單片微控制器,是在一塊晶元中整合了cpu 處理器 ram 資料儲存器 rom 程式儲存器 定時器 計數器和多種功能的i o 輸入 輸出 介面等一台計算機所需要的基本功能部件,從而可以完成複雜的運算 邏輯控制 通訊等功能。51微控制器是對所有相容intel 8031指令系統的微控制器的統稱...