HDU 4389 (分块打表)

题意:
f(x)表示x的各数位的和,给出[L,R],问区间中有多少个数x,存在x mod f(x) == 0


思路:
L,R范围在1e9,估算复杂度后发现应该可以递推打出一个表,按1000000每块,分块后将块内答案保存在数组中,块间累加,块内暴力,查询即可。(好像正解是数位dp)


代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define pb push_back
#define X first
#define Y second
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pii pair
#define qclear(a) while(!a.empty())a.pop();
#define lowbit(x) (x&-x)
#define sd(n) scanf("%d",&n)
#define sdd(n,m) scanf("%d%d",&n,&m)
#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define mst(a,b) memset(a,b,sizeof(a))
#define cout3(x,y,z) cout<

 

你可能感兴趣的:(ACM)