《水题系列一.ppt》由会员分享,可在线阅读,更多相关《水题系列一.ppt(10页珍藏版)》请在三一办公上搜索。
水题系列一,王玉涛031302428,题意,求最小的value,使得valuen,且value和n的二进制表示中的一的个数相同,解题思路,将n表示成二进制,然后找到一个当前位为1前一位为0的位置,然后把01改成10,然后该位之前的1贪心都放到后面例如:11100111000 01 10 0001111101000011,主要代码,while(cinn)int one=0,zero=0;while(true)if(n/再补1,每左移一位加1*/,样例理解,11011100-1101(zero=2,one=2)-1110(n+1)-111000(左移zero位)-111001(n+1)-11100100(左移one位)-11100011(n-1),#define lowbit(x)x,样例解释,n=11011100t=lowbit(n)=00000100n+t=11100000nn+t=00111100(nn+t)/t=00001111(nn+t)/t/4=00000011(n+t)+(nn+t)/t/4=11100011,位运算,左移 按位与&按位或|按位异或 按位取反 优先级:1 2 3&4 5|6&=、=、|=、=,lowbit(x)x&-xx=0.0.11011100-x=1.1.00100011+1-x=1.1.00100100 x&-x=0.0.00000100,总结,