SPOJ
来源:互联网 发布:山东广电网络集团官网 编辑:程序博客网 时间:2024/06/06 06:30
SPOJ - BALNUM Balanced Numbers
求A-B范围内的数,数满足:0-9如果存在,偶数的需要有奇数个,奇数的需要有偶数个。
对于0-9的一个数,三种情况:不存在(0),有奇数个(1),有偶数个(2)。
其实强行搞,你搞个10维,每维大小3,也是可以的。那么其实我们需要整合下这些状态,减小下代码丑度。
开个3^10 = 59049,做为一个三进制表状态。
注意:这题有前导0处理问题
http://blog.csdn.net/qq_33199236/article/details/72705193
这题可以不像上面写的pre记前i为是否存在0。可以通过判断状态是否为0来判断是否为前导0。
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<stack>#include<queue>#include<deque>#include<map>#include<algorithm>using namespace std;typedef long long LL;//#pragma comment(linker, "/STACK:102400000,102400000")const double PI = acos(-1.0);const double eps = 1e-6;const int INF=0x3f3f3f3f;const int N=1000010;const LL mod = 1e9+7;int bit[20];LL dp[20][59100];LL dfs(int pos,int state, bool limit){ if(pos == 0) { for(int i = 0; i <= 9; i++) { int val = state%3; state /= 3; if(i&1 && val==1) return 0; if(i%2==0 && val==2) return 0; } return 1; } if(!limit && dp[pos][state]!=-1) return dp[pos][state]; int up = limit?bit[pos]:9; LL ans = 0; for(int i = 0; i <= up; i++) { if(i==0 && state==0) ans += dfs(pos-1,state,limit && bit[pos]==i); else { //printf("%d -> ",state); int tstate = state; int nextstate = 0; int temp = 1; for(int j = 0; j <= 9; j++) { int val = tstate%3; tstate /= 3; if(j == i) { if(val == 2) val=1; else val++; } nextstate += val*temp; temp *= 3; } //printf("%d\n",nextstate); ans += dfs(pos-1,nextstate,limit && bit[pos]==i); } } if(!limit) { //printf("%d %d %d\n",pos,state,ans); dp[pos][state] = ans; } return ans;}LL solve(LL n){ int pos = 0; while(n) { bit[++pos] = n%10; n /= 10; } return dfs(pos,0,1);}int main(){ int T; scanf("%d",&T); memset(dp,-1,sizeof(dp)); while(T--) { LL a,b; scanf("%lld%lld",&a,&b); printf("%lld\n",solve(b)-solve(a-1)); } return 0;}
阅读全文
0 0
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- NYOJ-353 3D地图搜索
- C++字符串数组
- 360浏览器下自动填写用户名密码惹祸了
- Count of Smaller Numbers After Self
- POJ2676
- SPOJ
- androidSudio学习网站
- 18、vue.js 之路由钩子函数
- 算法作业_24(2017.5.23第十四周)
- hdu1846(巴什博弈)
- offsetwidth与width区别
- 线程辅助类(一)--Exchanger
- (一)表层网络信息获取(Python引擎爬虫)
- Debian&Ubuntu安装apache2