nyoj744 螞蟻的難題 一

2021-07-11 08:23:57 字數 1122 閱讀 8917

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:2 描述

小螞蟻童鞋最近迷上了位運算,他感覺位運算非常神奇。不過他最近遇到了乙個難題:

給定乙個區間[a,b],在區間裡尋找兩個數x和y,使得x異或y最大。來,幫幫他吧!

輸入

有多組測試資料(以eof結尾)。

每組資料輸入兩個數a,b.(0<=a輸出

輸出a到b之間,異或最大的值。

樣例輸入

1 2

8 9

樣例輸出

3

1

**螞蟻系列

解題思路:

求乙個區間[a,b]中任意兩個數異或的最大值:

先做a^b得到乙個數,該數二進位制的第乙個1(位置為q)一定產生於a的1和b的0做異或(因為a>b),所以q以上的位置a,b都是1,無法調動。但q以下的位置的0無論產生於a的1,b的1或是a的0,b的0,都可以對應調小a或者調大b來使得最終異或的結果為1111111……i.e. 2^cnt-1。

錯誤思路:暴力求出任意兩個數的二進位制,再求出異或值,列舉找出最大的。。。。。超時........當時對異或完全沒有概念,沒思路啊,,,,

錯誤**: 

#includeusing namespace std;

int a[100]= ,b[100]= ,ans,k1,k2,sum;

long long pp(long long aa,long long bb)

while(bb)

ans=k1>k2?k1:k2;

for(int i=0; imax)

max=pp(i,j);

}printf("%lld\n",max);

}return 0;

}

正解:

#include#include#include#includeusing namespace std;

int main()

sum=pow(2,ans)-1;

printf("%lld\n",sum);

}return 0;

}

ny 744 螞蟻的難題 一 位運算

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 小螞蟻童鞋最近迷上了位運算,他感覺位運算非常神奇。不過他最近遇到了乙個難題 給定乙個區間 a,b 在區間裡尋找兩個數x和y,使得x異或y最大。來,幫幫他吧!輸入 有多組測試資料 以eof結尾 每組資料輸入兩個數a,b.0 a輸出...

NYOJ 螞蟻的難題 二 dp

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 下雨了,下雨了,螞蟻搬家了。已知有n種食材需要搬走,這些食材從1到n依次排成了乙個圈。小螞蟻對每種食材都有乙個喜愛程度值vi,當然,如果vi小於0的時候,表示螞蟻討厭這種食材。因為馬上就要下雨了,所以螞蟻只能搬一次,但是能夠搬走...

nyoj 螞蟻的難題(二)745

描述 下雨了,下雨了,螞蟻搬家了。已知有n種食材需要搬走,這些食材從1到n依次排成了乙個圈。小螞蟻對每種食材都有乙個喜愛程度值vi,當然,如果vi小於0的時候,表示螞蟻討厭這種食材。因為馬上就要下雨了,所以螞蟻只能搬一次,但是能夠搬走連續一段的食材。時間緊急,你快幫幫小螞蟻吧,讓它搬走的食材喜愛值和...