hdu_5085_Counting problem(莫队分块思想)
来源:互联网 发布:usb虚拟打印机端口 编辑:程序博客网 时间:2024/06/07 04:57
题目连接:hdu_5085_Counting problem
题意:给你一个计算公式,然后给你一个区间,问这个区间内满足条件的数有多少个
题解:由于这个公式比较特殊,具有可加性,我们考虑讲一个数分为两个部分,这样就可以用莫队的思想均摊时间复杂度,将9位数分为一个4位和一个5位,这里我感觉sqr为10000 速度比较快。然后如果b小于sqr,那么直接暴力就行,如果b大于sqr,那么我们要把a和b都分为头部和尾部(注意是闭区间,a需要减1),如果a小于sqr,那么他的头部就为0,然后计算0-a的尾部,并将相应的值插入Hash表,然后计算以a头部开头满足条件的数,记为reta,同理,计算0-b的尾部,记为retb,如果b尾小于a尾,就要先计算b再计算a,然后将0到sqr-1的数对应的值也全部插入Hash表,然后从a的头到b的头,寻找对应的值,这里要用一下容斥定理,retb-reta就是从[a,b]之间满条件的数的个数.
#include<cstdio>#define F(i,a,b) for(int i=a;i<=b;i++)typedef long long LL;const LL M=(1<<20)-1,N=1e5+7,sqr=1e4;LL K,a,b,ahd,bhd,bt,at,reta,retb,T,S,dt[10][16];inline LL pow(LL x,LL k){LL an=1;while(k){if(k&1)an*=x;k>>=1,x*=x;}return an;}//------------Hash table------------------------struct E{LL key;LL cnt;E *nxt;}*g[M+1],pool[N],*cur=pool,*p;LL vis[M+1];void init_Hash(){T++,cur=pool;}inline void ins(LL key){if(key>S)return;LL u=key&M;if(vis[u]<T)vis[u]=T,g[u]=NULL;for(p=g[u];p;p=p->nxt)if(p->key==key){p->cnt++;return;}p=cur++,p->key=key,p->cnt=1,p->nxt=g[u],g[u]=p;}inline LL ask(LL key){if(key<0)return 0;LL u=key&M;if(vis[u]<T)return 0;for(p=g[u];p;p=p->nxt)if(p->key==key)return p->cnt;return 0;}//----------------------------------------------inline LL cal(LL x){LL an=0;while(x)an+=dt[x%10][K],x/=10;return an;}void init(){F(i,0,9)F(j,1,15)dt[i][j]=pow(i,j);}int main(){init();while(~scanf("%lld%lld%lld%lld",&a,&b,&K,&S)){init_Hash();ahd=(a-1)/sqr,bhd=b/sqr,at=(a-1)%sqr,bt=b%sqr;if(at<bt){F(i,0,at)ins(cal(i));reta=ask(S-cal(ahd));F(i,at+1,bt)ins(cal(i));retb=ask(S-cal(bhd));F(i,bt+1,sqr-1)ins(cal(i));}else{F(i,0,bt)ins(cal(i));retb=ask(S-cal(bhd));F(i,bt+1,at)ins(cal(i));reta=ask(S-cal(ahd));F(i,at+1,sqr-1)ins(cal(i));}F(i,ahd,bhd-1)retb+=ask(S-cal(i));printf("%lld\n",retb-reta);}return 0;}
0 0
- hdu_5085_Counting problem(莫队分块思想)
- 莫队算法 sqrt(n)分块思想
- hiho 1553区间统计 莫队算法+分块思想
- 分块思想
- 小z的袜子 莫队算法(分块思想) O(N*sqrt(N))
- CodeForces 802G Periodic RMQ Problem(线段树+分块思想)
- 初次接触分块思想
- GYM 100962F Problem F. Frank Sinatra(树上莫队+分块)
- 分块/莫队大法
- 分块与莫队
- 分块、莫队算法
- HYSBZ 2301 Problem b 莫比乌斯 分块优化
- 分块_莫队算法
- 分块(一) 分块的思想与基础功能实现
- CF-E. Holes(区间分块,二分思想)
- hdu_5110_Alexandra and COS(DP+分块思想)
- 【Codeforces 792E】 Colored Balls 【分块思想】
- Codeforces 797E Array Queries 分块思想
- 生成格雷码(腾讯2016研发工程师编程题)
- 7.8.实验 解题参考
- HTML&CSS基础学习笔记1.9-添加图片
- POJ1321(DFS深搜)
- IO流
- hdu_5085_Counting problem(莫队分块思想)
- eclipse js 格式化的xml文件,直接导入到eclipse就可以用
- 自定义时间格式模板
- 李迅雷:大城市化和居民加杠杆能支撑房价多久
- LoRaWAN版本历史及协议格式说明
- Jquery判断复选框 input type = checkbox 全部选中 ;全部不选中;其中不选中 则 全部就不能被选中;
- 选择排序
- AS报错:Unsupported major.minor version 52.0
- 可见光