hdu4389題目大意:
t
tt組詢問,每次詢問乙個區間[l,
r]
[l,r]
[l,r
].問你區間內有多少個數x%d
igx=
0,di
gx
x \ \% \ dig_x =0,dig_x
x%digx
=0,
digx
代表數x的數字和.
t ≤50
,n≤1
e9
t \leq 50 , n \leq 1e9
t≤50,n
≤1e9
題目思路:
分塊打表,設定步伐 d=1
e6
d = 1e6
d=1e
6.打出1000
1000
1000
個結果放入陣列.詢問時按照分塊的思想,查詢在第幾個塊得到答案,然後對餘下的塊進行暴力計算即可。
時間複雜度:o(t
∗d∗l
ogd)
o(t*d*logd)
o(t∗d∗
logd
) .實際執行1.3s.
ac**:
#include
using
namespace std;
#define ll long long
int res[
1005]=
;int cal (
int x)
return res;
}int solve (
int x)
return sum;
}int
main()
return0;
}
p2657題目大意:
詢問乙個區間[l,
r]
[l,r]
[l,r
].問你區間內有多少個不含前導零且相鄰兩個數字之差至少為 2 的正整數.
題目思路:
一樣。總結:
一類 詢問較少(t
≤100
t \leq 100
t≤10
0),上限較小(n≤2
e9
n \leq 2e9
n≤2e
9)的數字dp類題目可以考慮使用分段打表。
HDU 4389 (分塊打表)
題意 f x 表示x的各數字的和,給出 l,r 問區間中有多少個數x,存在x mod f x 0 思路 l,r範圍在1e9,估算複雜度後發現應該可以遞推打出乙個表,按1000000每塊,分塊後將塊內答案儲存在陣列中,塊間累加,塊內暴力,查詢即可。好像正解是數字dp include include i...
hdu 4548 素數打表
方法 篩法打表,再將是素數的中判斷是不是美素數。比較裸。但是就是一開始這樣做會超時。重新用乙個陣列來儲存到當前數字時已經出現了幾個美素數,最後將區間兩端所對應的相互減一下就可以了。include include include using namespace std define m 1000001...
hdu 1443 Joseph 暴力打表
題目大意 k個好人,k個壞人,確定n,利用joseph方法刪除所有壞人.由於資料規模,可以利用暴力打表,以後能打表就盡量打表。這題原本模擬資料時間完全夠的,但是測試資料有很多重複的,導致很多人超時,暗坑!以後要注意點這種情況。打表 includeint main while scanf d n n ...