回分類題庫
h182: G.A|B Problem
關鍵字: NPSC 2017 高中組初賽

測資點 : 9 | Time Limit : 10000 ms | Memory Limit : 128000 KB
Accepted : 13 Times / 10 Users | Submit : 101 Times / 29 Users | Accepted rate : 34%
題目加入時間 : 2018-09-17 15:25

Content: 简体中文

首殺 (First Blood) 是指在一場比賽之中,第一個對該題目獲得 Accepted 的隊伍稱爲拿到那一題的首殺。全場首殺是指在一場比賽之中,第一個獲得 Accepted 的隊伍稱爲拿到全場首殺。搶首殺一直都是比賽的樂趣之一,尤其是上傳之後顯⽰ Run id: 1(全場第一次的上傳)時拿到的首殺更讓人興奮!

因此,在比賽一開始的時候,尋找最簡單,程式碼又短的題目是搶全場首殺的關鍵!這種題目有時候可以從題目名稱下手!

瀚瀚小時候曾經參加過一場比賽,這場比賽的題本一發下來,第一道題目名字就寫著大大的「A + B Problem」!瀚瀚便很快樂地寫下以下這段程式碼,準備拿下全場首殺:

#include <iostream>
int main()
{
  int a, b;
  std::cin >> a >> b;
  std::cout << a | b << endl;
  return 0;
}

上傳之後,果不其然顯示 Run id: 1,瀚瀚很開心的準備慶祝拿到全場首殺的喜悅,沒想到,回傳回來的結果顯示 No, Wrong Answer!原來,瀚瀚因爲鍵盤敲的太快,不小心將 + 敲成 |,所以整份程式碼便出錯了!

因此,瀚瀚感到很難過,但同時他也很好奇,究竟他的程式碼有多大的機率,所輸出的答案其實跟正確答案一模一樣?但這個問題對瀚瀚來說有點困難,因此,他把問題簡化爲:當給定兩個正整數 A 及 X,究竟有多少正整數 B 滿足 B ≤ X,且當輸入的數字爲 A 和 B 時,瀚瀚所輸出的答案會跟正確答案⼀樣,亦即 A | B = A + B。

A | B 表示對 A, B 進行位元或運算 (bitwise OR),即將兩數以二進制展開後,每位元分別做 OR 運算,也就是 C/C++ 中的 | 運算子。舉例來說,1 | 2 = 3,而 2 | 2 = 2。 

Input:

測試資料第一行,包含一個正整數 T,代表瀚瀚有 T 對想知道答案的 A 和 X。接下來 T 行,每行包含兩個正整數 A, X,代表瀚瀚所提出問題中的 A 及 X。

Output:

請輸出 T 行,每行包含一個整數代表有多少個正整數 B 滿足所給定的條件。

Sample Input:help

若題目沒有特別說明,則應該以多測資的方式讀取,若不知如何讀取請參考 a001 的範例程式。
2
1 2
2 2

Sample Output :

1
1

Hint :

Author :

NPSC 2017 高中組初賽 (管理員:sagit)

  Solve it!   Status Forum