題目鏈結
刷牛客一戰到底做到的,感覺還挺有趣...
求給定\(n\)及序列\(a_i\),求$$\sum_(a_i\oplus a_j)(a_j\oplus a_k)(a_i\oplus a_k)$$
\(n\leq10^5,\ a_i\leq10^9\)。
首先有乙個\(o(n\log^2n)\)的做法,**這裡有,看來是跑不過去..(不知道提交記錄裡有沒有過的)
來自國慶正睿dls課件。
能跑過的做法:
注意,口胡的,不保證正確性= =(但是演算法是對的)(沒辦法啊找不到題解,還比較趕時間...)
當然還是想拆開乘法按位統計。
考慮列舉每乙個異或結果\(2^x\)的貢獻:$$ans=\sum_\sum_\sum_2\times ?$$
乘上多少呢?現在我們需要統計\(a_i\oplus a_j\)在第\(i\)為\(1\),且\(a_j\oplus a_k\)在第\(j\)位為\(1\),且\(a_k\oplus a_i\)在第\(k\)位為\(1\)的方案數(不要弄混...\(a_i\)中的\(i\)就是下標,外面的\(i\)是列舉的\(2^i\))。
考慮列舉\(a_i\)第\(i\)位是\(0\)還是\(1\),設為\(a\),那麼\(a_j\)的第\(i\)位是\(a\oplus1\);同理列舉\(a_j\)的第\(j\)位是\(b\),那麼\(a_k\)的第\(j\)位是\(b\oplus1\);同理列舉\(a_k\)的第\(k\)位的\(c\),那麼\(a_i\)的第\(k\)位是\(c\oplus1\)。(這麼打累死我了...)
那麼合法的\(a_i\)就是,第\(i\)位為\(a\)且第\(k\)位為\(c\oplus1\)的數字,\(a_j,a_k\)同理...
所以記\(cnt[i][j][a][b]\)表示第\(i\)位為\(a\),第\(j\)位為\(b\)的\(a_x\)有多少個,乘起來就ok了。
預處理\(cnt\)的複雜度是\(o(n\log^2n)\),常數很小。最後求和的複雜度是\(o(2^3\log^3n)\)。
答案最後除個\(6\)。
//97ms 1892kb
#include #include #include #include //#define gc() getchar()
#define mod 998244353
#define inv6 166374059
#define maxin 500000
#define gc() (ss==tt&&(tt=(ss=in)+fread(in,1,maxin,stdin),ss==tt)?eof:*ss++)
typedef long long ll;
const int n=31;
int cnt[n][n][2][2],pw[n<<2];
char in[maxin],*ss=in,*tt=in;
inline int read()
inline int calc(int i,int j,int x,int y)
int main()
pw[0]=1;
for(int i=1; i<90; ++i) pw[i]=pw[i-1]<<1, pw[i]>=mod&&(pw[i]-=mod);
ll ans=0;
for(int i=0; i
for(int j=0; j
for(int k=0; k
for(int a=0; a<2; ++a)
for(int b=0; b<2; ++b)
for(int c=0; c<2; ++c)
ans+=1ll*pw[i+j+k]*calc(i,k,a,c^1)%mod*calc(i,j,a^1,b)%mod*calc(j,k,b^1,c)%mod;
printf("%lld\n",ans%mod*inv6%mod);
return 0;
}
牛客國慶集訓派對Day4
a 把b n include include include includeusing namespace std int main d 由於是個完全圖,選擇乙個權值最小的點,其他所有的點向它連線就行了。注意點為1的時候輸出0 include include include includeusing...
牛客國慶集訓派對Day4 G I H
小 bo 有 n 個正整數 a1.an,以及乙個權值序列 w1 wn,現在他定義 現在他想知道 你只需要輸出答案對 109 7 取模後的值 第一行乙個正整數 n 第二行 n 個正整數 a1.an 第三行 n 個正整數 w1.wn 輸出答案對 109 7 取模後的值示例1 複製3 1 1 1 1 1 ...
2020牛客國慶集訓派對day4 補題
2020牛客國慶集訓派對day4 b 題意 題意 求最長等差序列的長度。dp 攤派了我講不明白,參考下這兩篇部落格吧 捂臉 傳送門1 傳送門2 include include include include include include include using namespace std ty...