BZOJ1026: [SCOI2009]windy数
md直接wa了78次,身败名裂
没学过数位DP硬搞了一道数位DP的模板题,感觉非常的愉(sha)悦(cha)。
二分转化枚举思想。首先DP预处理出来$f[i][j]$表示有$i$位且第$i$位为$j$的windy数有多少个,然后搞个$g[i]$表示$i$位上可以有多少个windy数。然后二分出来最大的小于$A$和$B$的windy数。相减就好了。
//BZOJ 1026 //by Cydiater //2016.10.24 #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <ctime> #include <cstring> #include <string> #include <algorithm> #include <queue> #include <map> #include <iomanip> #include <bitset> using namespace std; #define ll long long #define up(i,j,n) for(int i=j;i<=n;i++) #define down(i,j,n) for(int i=j;i>=n;i--) const int oo=0x3f3f3f3f; inline ll read(){ char ch=getchar();ll x=0,f=1; while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } ll f[15][15],A,B,g[15],ten[15]; namespace solution{ void init(){ A=read();B=read(); ll tmp=1; up(i,1,14){ ten[i]=tmp; tmp*=10LL; } } ll col(ll pos,ll re,ll last){ if(pos==0)return 0; if(last==-1){ if(pos==1){ if(re<=f[pos][0])return 0; re-=f[pos][0]; } up(i,1,9){ if(re<=f[pos][i])return ten[pos]*i+col(pos-1,re,i); re-=f[pos][i]; } }else{ if(pos==1&&last-2>=0){ if(re<=f[pos][0])return 0; re-=f[pos][0]; } if(last-2>=0){ ll sum=0; up(i,2,9)sum+=f[pos-1][i]; if(re<=sum) return col(pos-1,re,0); else re-=sum; } up(i,1,9)if(abs(i-last)>=2){ if(re<=f[pos][i]) return ten[pos]*i+col(pos-1,re,i); re-=f[pos][i]; } } } ll check(ll id){ ll last=-1,ans=0,high=0; down(i,11,1)if(g[i]<id){ high=i; id-=g[i]; break; } ans=col(high+1,id,-1); return ans; } ll get(ll num){ ll leftt=0,rightt=10000000000LL,mid; while(leftt+1<rightt){ mid=(leftt+rightt)>>1; if(check(mid)<=num) leftt=mid; else rightt=mid; } if(check(rightt)<=num) return rightt; return leftt; } void slove(){ memset(f,0,sizeof(f)); up(i,0,9)f[1][i]=1; up(i,2,14)up(j,0,9){ up(k,j+2,9)f[i][j]+=f[i-1][k]; down(k,j-2,0)f[i][j]+=f[i-1][k]; } if(A>B)swap(A,B); memset(g,0,sizeof(g)); g[0]=1; up(i,1,14){ g[i]+=g[i-1]; up(j,1,9)g[i]+=f[i][j]; } cout<<get(B)-get(A-1)<<endl; } } int main(){ //freopen("input.in","r",stdin); //freopen("out1.out","w",stdout); using namespace solution; init(); slove(); return 0; }
BZOJ1026: [SCOI2009]windy数的更多相关文章
- BZOJ1026 SCOI2009 windy数 【数位DP】
BZOJ1026 SCOI2009 windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B ...
- BZOJ1026: [SCOI2009]windy数[数位DP]
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6346 Solved: 2831[Submit][Sta ...
- 【数位DP】bzoj1026: [SCOI2009]windy数
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4163 Solved: 1864[Submit][Sta ...
- bzoj1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8203 Solved: 3687[Submit][Sta ...
- 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...
- bzoj千题计划117:bzoj1026: [SCOI2009]windy数
http://www.lydsy.com/JudgeOnline/problem.php?id=1026 数位DP 如果前一位填的是0, 0是前导0,下一位可以随便填 0不是前导0,下一位不能填1 为 ...
- bzoj1026: [SCOI2009]windy数(传说你是数位DP)
1026: [SCOI2009]windy数 题目:传送门 题解: 其实之前年少无知的时候好像A过...表示当时并不知道什么数位DP 今天回来深造一发... 其实如果对这个算法稍有了解...看到这题的 ...
- [bzoj1026][SCOI2009]windy数_数位dp
windy数 bzoj-1026 题目大意:求一段区间中的windy数个数. 注释:如果一个数任意相邻两位的差的绝对值都不小于2,这个数就是windy数,没有前导0.$区间边界<=2\cdot ...
- [BZOJ1026][SCOI2009]windy数 解题报告|数位dp
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 一直 ...
随机推荐
- 杀毒软件导致YourSQLDba备份失败
有一朋友咨询我,他配置的YourSQLDba 备份作业经常出现备份失败的情况,我帮忙查看了一下,首先从告警邮件中查看出错的具体信息,执行了下面SQL语句(来自于告警邮件) Exec YourSQLDb ...
- 3-2 bash 特性详解
根据马哥Linux初级 3-2,3-3,编写 1. 文字排序 不影响源文件,只是显示根据ASCII码字符升序 nano的用法, 其实这个是生成一个文本,然后就可以在里面编辑. Ctrl + o, 后回 ...
- 【2016-11-7】【坚持学习】【Day22】【C# 委托的应用】
我觉得我对委托的概念还没有完全掌握,于是,我需要继续思考,学习它的应用实现.
- tomcat配置SSL双向认证
一.SSL简单介绍 SSL(Secure Sockets Layer 安全套接层)就是一种协议(规范),用于保障客户端和服务器端通信的安全,以免通信时传输的信息被窃取或者修改. 怎样保障数据传输安全? ...
- BZOJ 2120 数颜色&2453 维护队列 [带修改的莫队算法]【学习笔记】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 3665 Solved: 1422[Submit][Status][Discuss] ...
- C# SaveFileDialog的用法(转载)
#region 保存对话框private void ShowSaveFileDialog(){//string localFilePath, fileNameExt, newFileName, Fil ...
- JSX语法简介
React的核心机制之一就是可以在内存中创建虚拟的DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能. JSX简介 JSX就是Javascript和XML结合的一种格式.Reac ...
- IE9下css hack写法
ie9一出css hack也该更新,以前一直没关注,今天在内部参考群mxclion分享了IE9的css hack,拿出来也分享一下: select { background-color:red\0; ...
- 新的一年快开始了,学点新东西吧,从React开始(一)
ReactJS是Facebook出的前端View框架,好东西啊. 看看它的说明: 仅仅是UI 许多人使用React作为MVC架构的V层. 尽管React并没有假设过你的其余技术栈, 但它仍可以作为一个 ...
- Learning to rank 特征抽取
http://blog.csdn.net/puqutogether/article/details/42124491 http://www.microsoft.com/en-us/research/p ...