校慶志願者小z在休息時間和同學們玩卡牌遊戲。一共有n張卡牌,每張卡牌上有乙個數ai,每次可以從中選出k張卡牌。一種選取方案的幸運值為這k張卡牌上數的異或和。小z想知道所有選取方案的幸運值之和除以998244353的餘數。
對於30
%30\%
30%的資料滿足,1≤n
≤20
1\le n\le20
1≤n≤20
對於另30
%30\%
30%的資料滿足,1≤n
≤100
1\le n\le 100
1≤n≤10
0,0 ≤1024 00≤10 24對於80 %80\% 80%的資料滿足,1≤n ≤2000 1\le n\le2000 1≤n≤20 00對於100 %100\% 100% 的資料滿足,1≤n ≤100000,0 <231 ,1≤k ≤n 1\le n\le100000,01≤ n≤10 0000 ,0<23 1,1≤ k≤n給出n nn個數,在其中選k kk個數求異或和,問所有情況異或和的總和模998244353的結果 異或的套路一般都是按位來處理,這題也是。求出每個位置上為1有多少個數,然後根據組合數得出公式(設當前位置j jj上1的個數是xxx) a ns =∑i= 1min (k,x )(xi )(n− xk−i )2 jans=\sum_^\beginx\\i\end\beginn-x\\k-i\end2^j ans=∑i =1mi n(k, x)( xi) (n−x k−i )2j解釋: 首先一定要保證i ii是奇數,因為只有是奇數當前位置才能有值。那麼可以在當前位置是1的x xx的位置中選擇i ii個,方案cxi c_x^i cxi 然後在剩下的n−x n-xn− x個當前位置為0的數中選取k−i k-ik− i個,方案為cn− xk−i c_^cn −xk− i最後乘上當前位置的值2 j2^j 2j即可 #define ll long long #define p 998244353 using namespace std; ll ans,n,k,x,a[ 150000 ],jc[ 150000]; ll ksm (ll x,ll y) return res; }ll c (ll x,ll y) intmain() printf ("%lld\n" ,ans) ;fclose (stdin); fclose (stdout); return0; } 今天和學軍 雅禮的dalao們一起切磋,感覺他們太強了。接到題目 t1 一定存在著什麼規律。於是我後來打了個表找了一下規律 顯然 部分大佬們想到t1的部分分的dp 強 t2 一看就知道很可能是dp。我dp很爛,所以先打30分暴力再說。打完之後去想60分。我又根據暴力發現了在遞增序列裡,剩下的後面的數... 今天幹了些什麼 看到第一題,我蒙b了 感覺這題之前在 見過,記得好像是將圖斜過來看還是怎樣的。於是去看第二題。第二題乙個很顯然的做法,將邊排序,然後暴力建mst。然而我將時間複雜度多算了乙個0,以為不能過,結果我多加了乙個用來騙分的東西,結果這個騙分的東西打錯了,要騙分的那兩個資料都沒過。55555... 校慶志願者小z在休息時間和同學們玩卡牌遊戲。一共有n張卡牌,每張卡牌上有乙個數ai,每次可以從中選出k張卡牌。一種選取方案的幸運值為這k張卡牌上數的異或和。小z想知道所有選取方案的幸運值之和除以998244353的餘數。輸入的第一行有兩個整數n和k。第二行有n個整數,表示序列a。乙個整數表示答案。輸...#include
NOIP2017提高A組集訓10 21 總結
NOIP2017提高A組集訓10 30 總結
NOIP2017提高A組集訓10 22 幸運值