bzoj 3780 數字統計 (數字dp)

2021-07-24 11:00:54 字數 2111 閱讀 7697

time limit: 10 sec  memory limit: 128 mb

submit: 50  solved: 27 [

submit][

status][

discuss]

小a正在研究一些數字統計問題。有一天他突然看到了乙個這樣的問題:

將[l..r]中的所有整數用m位二進位制數表示(允許出現前導0)。現在將這些數中的每乙個作如下變換:

從這個數的最低兩位開始,如果這兩位都是0,那麼x=1,否則x=0。現在將這兩位刪去,然後將x放在原來最低位的位置上。重複這個變換直到這個數隻剩下一位為止。

例如01001的變換過程如下:

01001-->0100-->011-->00-->1。

現在的問題是變換後的所有數中,值為y(y為0或1)的有多少個?

小a不會了,他想讓你幫助他完成這個問題。

輸入檔案包含多組測試資料。

第一行,乙個整數t,表示測試資料的組數。

接下來的t節,每節對應一組測試資料,格式如下:

第一行,兩個整數m、y。

第二行,兩個m位二進位制數l、r。

對於每組測試資料,輸出一行,乙個二進位制數,表示該組測試資料中[l..r]中的所有整數變換後的值為y的個數。這裡的二進位制數不允許出現前導0。 1

3 1001 101

11對於全部的資料,1<=m<=200,1<=t<=50。 [

submit][

status][

discuss]

題解:數字dp

這道題要寫二進位制高精哦。。。

我們先看上面的變換,正常來看應該是從低位向高位填,每次將填好的最後兩個變成他要求的0或1,但是這樣推沒法控制上下界。那麼倒著看上面的變換過程00->1 這個其實第一位的0就是原數的0,那麼也就是每次由一位變成兩位,這兩位中的第乙個一定是與原數一致的,第二個表示的是下面兩位的變換。

f[i][j][0/1][0/1]表示的是確定到第i位,下面兩位的變換結果為j,是否卡上下界。

#include#include#include#include#include#define n 203

using namespace std;

int n,m;

int a[n],b[n],t,st[n],top,opt;

char s[n];

struct number

number operator + (const number &a)

while (c.s[t+1])

c.len=t;

return c;

} number operator += (const number &a)

}ans,f[n][3][3][3],one;

bool pd(int x,int y)

void solve(int x)

for (int i=cnt;i>=1;i--) printf("%d",st[i]);

printf("\n");

}int main()

else

f[1][0][a[1]==0?1:0][b[1]==0?1:0]+=one;

}for (int i=1;i<=n-1;i++)

for (int j=0;j<=1;j++)

for (int a1=0;a1<=1;a1++)

for (int b1=0;b1<=1;b1++)

if (f[i][j][a1][b1].len!=0)

else if (a1)

else if (b1)

else

}else

else if (a1)

else if (b1)

else f[i+1][0][0][0]+=f[i][j][a1][b1];}}

for (int i=0;i<=1;i++)

for (int a1=0;a1<=1;a1++)

for (int b1=0;b1<=1;b1++)

else if (a1)

else if (b1)

else ans+=f[n-1][i][a1][b1];

}if (ans.len)

else printf("0\n");

//cout<

bzoj3780 數字統計

題意 將 l.r 中的所有整數用m位二進位制數表示 允許出現前導0 現在將這些數中的每乙個作如下變換 從這個數的最低兩位開始,如果這兩位都是0,那麼x 1,否則x 0。現在將這兩位刪去,然後將x放在原來最低位的位置上。重複這個變換直到這個數隻剩下一位為止。例如01001的變換過程 01001 010...

A 統計數字

time limit 1 sec memory limit 128 mb submit 51 solved 28 submit status web board 某次科研調查時得到了n個自然數,每個數均不超過1500000000 1.5 109 已知不相同的數不超過10000個,現在需要統計這些自然...

統計數字問題

在王曉東編著的 演算法設計與實驗題解 中看到的這個問題,問題描述如下 一本書的頁碼從自然數1開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排,每個頁碼都不含多餘的前導數字0。例如第6頁用6表示而不是06或006。數字統計問題要求對給定書的總頁碼,計算出書的全部頁碼中分別用到多少次數字0,1,2,...