字首和 無限序列

2021-09-24 04:37:13 字數 1347 閱讀 1767

我們按以下方式產生序列:

1、 開始時序列是: 「1」 ;

2、 每一次變化把序列中的 「1」 變成 「10」 ,「0」 變成 「1」。

經過無限次變化,我們得到序列"1011010110110101101…"。

總共有 q 個詢問,每次詢問為:在區間a和b之間有多少個1。

任務 寫乙個程式回答q個詢問

第一行為乙個整數q,後面有q行,每行兩個數用空格隔開的整數a, b。

共q行,每行乙個回答

輸入樣例

1

2 8

輸出樣例
4
約定

1 <= q <= 5000

1 <= a <= b < 2^63

利用字首和

我們看**

序號字串

字串長度

1的數量

1 111

112

2210

213

3310132

4

441011053

5

551011010185

6

661011010110110136

7

77101101011011010110101

2111

它的字串、字串的長度、1的數量

都遵從了斐波那契數列

然後我們假設長度為7的

我們可以找幾個斐波那契數

組合起來

比如2與5

原本長度為7

1的個數為4

長度為2和5的

1的個數為1和3

加起來就4

所以我們可以利用字首和

先求出yyy的

在求出x−1

x-1x−

1的(字首和,包括x

xx,所以-1)

相減就行了

#include

#include

#include

#include

#include

#define ll long long

using

namespace std;

ll f[

1025

],a[

1025];

ll ans,n,m,t,x,y;

ll find

(ll k)

return ans;

}int

main()

return0;

}

斐波那契 字首和 無限序列

有這樣乙個規則 1.把 1 變成 10 2.把 0 變成 1 乙個序列的第一位是 1 然後是 10 101 序列無限次操作後會得到 1011010110110101101 問某乙個區間內有多少個 1 我們按以下方式產生序列 1 開始時序列是 1 2 每一次變化把序列中的 1 變成 10 0 變成 1...

8 12 無限序列 1861

我們按以下方式產生序列 1 開始時序列是 1 2 每一次變化把序列中的 1 變成 10 0 變成 1 經過無限次變化,我們得到序列 1011010110110101101 總共有 q 個詢問,每次詢問為 在區間a和b之間有多少個1。任務 寫乙個程式回答q個詢問 輸入 第一行為乙個整數q,後面有q行,...

模擬 無限序列

題目描述 我們按以下方式產生序列 1 開始時序列是 1 2 每一次變化把序列中的 1 變成 10 0 變成 1 經過無限次變化,我們得到序列 1011010110110101101 總共有 q 個詢問,每次詢問為 在區間a和b之間有多少個1。任務 寫乙個程式回答q個詢問 輸入 第一行為乙個整數q,後...