兔子的區間密碼 牛客OI周賽8 普及組

2021-09-13 20:33:58 字數 1215 閱讀 9144

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

第一行乙個數 t,表示資料組數。

接下來 t 行,每行兩個數 l,r, 表示區間[l,r]。

輸出共t行每行乙個整數,表示[l,r]的密碼。
示例1

複製

5

1 10

2 33 4

5 52 5

複製

1517

07

對於30%的資料 

1 ≤ t ≤ 10

0 ≤ l ≤ r ≤ 100

對於另外10%的資料

l=r對於70%的資料

1 ≤ t ≤ 10

0 ≤ l ≤ r ≤ 50000

對於100%的資料

1 ≤ t ≤ 10000

0 ≤ l ≤ r ≤ 1018

(對於100%的資料) 輸入資料較大,請使用快速讀入。

解法:從高位到低位列舉每一位,判斷當前位的狀態:即必須取(**中must函式),必須不能取(**中mustnt函式),以及可取可不取,以下是討論

1)若當前位不取,由剩下的所有位構成的最大數加上當前取到的數a小於區間左端點l,則必須取;

2)若當前位取,當前取到的數a加上當前位的數大於區間右端點r,則一定不能取;

3)   除去1)2)中的情況即為可取可不取;

記錄兩個數a,b為當前兩個數,然後分別判斷兩個數對應的以上3種情況的哪一種,討論如下:

1)若兩個數都是第一種情況,都加上1<2)若只有乙個是第一種情況,則把這個加上1<3)若兩個數都不是第一種情況,則若兩個中只要有乙個可取當前位,則給其中能取當前位的任意乙個加上1《附**:

#include#includeusing namespace std;

typedef long long ll;

ll l,r,a,b;

int t;

bool must(ll k,int i)

int main()

else if(must(a,i)&&!must(b,i))

else if(!must(a,i)&&must(b,i))

else

}}

printf("%lld\n",a^b);

}}

牛客oi周賽7

a 小睿睿的等式 theme 給定n k n k 0,0 n 50000000 a,b 0 表示開始時有根火柴,問滿足擺成a b n所使用的火柴數為n k的等式有幾種 b a n與a b n看作一種 各用兩根 數字擺法為 solution 列舉。基本思路是用n減去擺n和 所用的火柴數得到擺a b所需...

牛客周賽兔子的名字

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 兔子發現序列的名字都是數字,實在太無聊了,於是兔子開始研究兔子的名字。現在兔子手上有 n 個名字 ti 和 m 個可愛詞彙sj,兔子對每乙個名字 ti 定義了乙個可...

牛客OI周賽9 普及組

目錄a題 b題 c題 小q挺喜歡擼串的,沒錯,字串!你給小q送上了n個字串 對於乙個字串s,如果在小q擼掉 刪除 任意個字元之後,nowcoder 是其子串,則這個字串s是可擼的。小q最近切題切到手軟,想擼串散散心。如果你給他呈現的字串是可擼的,他會很開心,否則他會很桑心。輸入描述 乙個整數n,表示...