有這樣乙個規則:1.把「1」變成「10」 2.把「0」變成「1」
乙個序列的第一位是「1」
然後是:「10」,「101」……
序列無限次操作後會得到「1011010110110101101……」
問某乙個區間內有多少個「1」
我們按以下方式產生序列:
1、 開始時序列是: 「1」 ;
2、 每一次變化把序列中的 「1」 變成 「10」 ,「0」 變成 「1」。
經過無限次變化,我們得到序列"1011010110110101101…"。
總共有 q 個詢問,每次詢問為:在區間a和b之間有多少個1。
任務 寫乙個程式回答q個詢問
第一行為乙個整數q,後面有q行,每行兩個數用空格隔開的整數a, b。
共q行,每行乙個回答
1
2 8
4
1⩽q
⩽50001⩽a
⩽b
<263
1 \leqslant q \leqslant 5000 1 \leqslant a\leqslant b < ^
1⩽q⩽50
001⩽
a⩽b<26
3首先暴力是不可能的
我們可以發現這就是乙個斐波那契
1 10 101 10110 10110101
1 1+0 10+1 101+10 10110+101
然後寫上1的個數和長度
1 1 1
10 1 2
101 2 3
10110 3 5
10110101 5 8
可以發現他們都是斐波那契數列,而且長度為下乙個數的1的個數
我們就可以先預處理前100項(第100項⩾263
\geqslant ^
⩾263
)然後可以用其中的一些項拼成1~a-1&b的1的個數,然後用字首和原理一減就可以了
#include
#define ull unsigned long long
using
namespace std;
int n;
ull x,y,a[
105]
;ull ask
(ull dep)
return ans;
}int
main()
}
無限序列 斐波那契數列
description 我們按以下方式產生序列 1 開始時序列是 1 2 每一次變化把序列中的 1 變成 10 0 變成 1 經過無限次變化,我們得到序列 1011010110110101101 總共有 q 個詢問,每次詢問為 在區間a和b之間有多少個1。任務 寫乙個程式回答q個詢問 input 第...
斐波那契 遞迴 無限序列
我們按以下方式產生序列 1 開始時序列是 1 2 每一次變化把序列中的 1 變成 10 0 變成 1 經過無限次變化,我們得到序列 1011010110110101101 總共有 q 個詢問,每次詢問為 在區間a和b之間有多少個1。任務 寫乙個程式回答q個詢問 第一行為乙個整數q,後面有q行,每行兩...
斐波那契序列
斐波那契 fibonacci1170 1250 義大利最傑出的數學家。其父為比薩的商人,他認為數學是有用的,因此送斐波那契向阿拉伯教師們學習數學,掌握了印度數碼之一新的記數體系,後來遊歷埃及 敘利亞 希臘 西西里 法國等地,掌握了不同國家和地區商業的算術體系,1200年回答比薩,潛心研究數學,120...