發現規律了嗎鐵汁萌
由打表可知
好像存在乙個比較神奇的序列b,序列b大概是這樣的:
c(k-1,k-1) c(k,k-1) c(k+1,k-1) c(k+2,k-1)…
具體為啥是這樣我也不知道反正打表打出來就是這樣qaq 貌似是什麼k次字首和的生成函式進行廣義二項式展開 我也不懂qaq反正知道這個結論了就行 多寫幾項就看出來了
a1對ans[i]的貢獻為a1b[i]…
a2對ans[i]的貢獻為a2b[i+1]…
a3對ans[i]的貢獻為a3b[i+2]…
…an對ans[i]的貢獻為an*b[i+n-1]…
然後ans是把這些貢獻全都異或起來
好像應該用數學語言描述一下但是我不太會用這個東西所以就將就看吧 這樣看應該比數學公式更直觀
等等 這個東西好像有點眼熟 阿
像不像多項式的乘法但是最後加的部分變成了異或?
多項式乘法的頭和異或的尾巴?
1e5的範圍當然是考慮fft啦
當時我竟然還行1e10莽過去幸好隊長勸住了我
萬能的群友告訴我異或也許是fwt然後我又去學了一下fwt發現 這玩意套不上阿 然後又想改fft的板子 但是又學了一遍原理之後感覺也改不了qaq 最後做法竟然是做十七遍fft分別異或我人傻了 果然暴力才是yyds
最後 一定要記得初始化 不然就會像我一樣輸出一堆亂七八糟的數手足無措。
ac**:
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const ll n
=4e6+10
;const double pi =
acos(-
1.0)
;using namespace std;
struct complex
complex operator +
(const complex &a)
complex operator -
(const complex &a)
complex operator *
(const complex &a)};
ll r[n]
;complex a[n]
,b[n];
void
fft(complex* a,ll n,ll type)
for(ll mid=
1;mid}}
}ll aa[
100100];
ll jiou[
100100];
ll ans[
100100];
ll poww
(ll a, ll b)
return ans;
}int main()
for(ll haha=
1;haha<=
17;haha++
)for
(ll i=
0;i<=m;i++
) x=jiou[i]
,b[i]
.x = x,b[i]
.y=0
;
ll len =
1,l=0;
while
(len <=
(n+m)
) len *=
2,l++
;for
(ll i=
0;i) r[i]
=(r[i>>1]
>>1)
|((i&1
)<<
(l-1))
;fft
(a,len,1)
;fft
(b,len,1)
;for
(ll i=
0;i<=len;i++
)fft
(a,len,-1
);for(ll i=
0;i<=n;i++)/*
cout<<"haha="<}
for(ll i=
0;i)printf
("\n");
return0;
}
等我有時間就把校賽網路賽的最後一題也補了,聽說也是fft 傅利葉真聰明阿嗚嗚嗚
g題 待補
j題 待補
科大訊飛杯 日期小助手(補)
思路 找規律發現母親節出現的日期在8 14之間,若x 8則x x 7 15,父親節出現的日期在15 21之間,若x 15則x x 7 22,賽時忘記掉2100年不是閏年了真的找bug找吐了 include include typedef long long ll using namespace st...