非負整數區間內含某數字的數的個數

2022-04-30 20:27:11 字數 584 閱讀 4716

群裡有人問了這個問題

然後被attack秒了orz

考慮數字dp

預處理v[第幾位][該位是否是目標數字][是否有目標數字]

顯然數字除了0之外的求解過程是完全一致的

那麼我們特判0就可以了

#include"cstdio"

#include"cstring"

#include"iostream"

#include"algorithm"

using namespace std;

long long l,r,val;

long long v[19][2][2],pw[19],lis[19];

long long dfs(long long x,int ct,bool fl)

long long slv(long long x)

int main()

scanf("%lld%lld%d",&l,&r,&val);--l;

printf("%lld\n",slv(r)-slv(l));

return 0;

}

40億個非負整數中找到沒出現的數

要求這裡的非負整數是32位也就是0 2 32 1。最多用1gb的記憶體。如果只能用10mb的空間呢,只需要找到乙個沒有出現的數即可。首先先分析一下,40億個4b約為16gb這裡只用1gb,這裡要求注意是找出沒出現,這就和網頁過濾系統類似,出現與不出現兩個狀態 0和1 那麼我們就可以用bit陣列來確定...

40億個非負整數中找到未出現的數

32位無符號整數的範圍是0 4 294 967 295,現在有乙個正好包含40億個無符號整數的檔案,所以在整個範圍中必然有未出現過的數。怎麼找到所有未出現過的數?要求 可以使用最多1gb的記憶體。高階 記憶體限制10mb,但是只用找到乙個沒出現過的數即可。常規方法 假設用雜湊表來儲存出現過的數,那麼...

40億個非負整數中找到出現2次的數和所有數的中位數

題目一 32位無符號整數的範圍是0 4294967295,現在有40億個無符號整數,可以使用最多1gb的記憶體,找出所有出現了兩次的數。題目二 記憶體限制在10mb,如何找到這40億個整數的中位數。解法思路 依然bit 陣列的思路,不過這次是雙倍長度了,因為我們除了要記錄這個數字,同時還有記錄他出現...