題目大意:給你乙個序列,求滿足$x_\: xor\; x_$在二進位制下1的數量為奇數的數對數量
打月賽的時候真沒想出來,還是我太弱..
xor意義下,對於兩個數,假設它們兩個每一位都是2個0,或者乙個1乙個0,那麼xor之後的數中1的數量是直接相加
如果有同一位有2個1,兩個1xor會變成0,1的總數量-2,也不會影響1數量的奇偶性
那麼我們只需要統計二進位制下,奇數個1的數的個數,和偶數個1的數的個數即可
統計的過程要用到乙個套路,預處理出0~(2^16)裡每個數中1的數量
乙個數中1的數量就是高16位和低16位中1的數量相加嘛
注意,詢問的序列是從1開始的!因為這個我調了半天!
1//luogu-judger-enable-o2
2 #include 3 #include 4 #include 5 #include 6
#define n 10000010
7#define ll long long
8#define ui unsigned int
9#define maxn (1<<16)
10#define rint register int
11using
namespace
std;
12//
re13
14int
gint()
1518
while(c>='
0'&&c<='9')
19return ret*fh;20}
21int
n;22
ll a,b,c,d;
23ui x[n];
24int cnt[(1
<<17)+100
];25
26int
main()
2737
else 38}
39 printf("
%lld\n
",odd*eve);
40return0;
41 }
P4932 瀏覽器(統計二進位制1的個數)
p4932 瀏覽器 有 n 個數,x 1,x 2,cdots,x n 問你有多少對 u,v 使得 x u operatornamex v 的二進位制表示中有奇數個 1 輸入六個整數,n,a,b,c,d,x 0 每個點的權值需要用如下的方式生成。x i ax 2 bx c bmod d n le 10...
思維題 排隊接水(洛谷 P1223)
題目描述 有n個人在乙個水龍頭前排隊接水,假如每個人接水的時間為ti,請程式設計找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。純思維題,這道題最重要的就是,每個人的等待時間為不是ti,而是每個人前面的人等待時間之和,換個思維就是每個人的等待時間 這個人之後的人數。接水順序就是接水時間從小...
洛谷p1338末日的傳說(思維好題,數學)
題目暴力全排列是肯定不行的。比較難想啊,關鍵抓住字典序小也就是小的數盡量往前排,找剩餘的逆序對數!思考逆序對數需要用到數學排列組合的知識,長度為n的序列最多有n n 1 2個逆序對,組合數知識一算就知道。還需要long long才過 1 include 2 using namespace std 3...