/*
题意:求出p-q的第j个nya数
数位dp,求出p-q的所有nya数的个数很好求,但是询问求出最终那个第j个值时是我不会求了看了下别人的思路
具体就是把p-q的第j个转化成0-q的第low+j个(其中low为小于等于p的nya数)
枚举q的每一位数字,枚举位数值并进行比较直至求出每一位的值。
经典好题,长见识了。
*/
#include<stdio.h>
#include<string.h>
#define ll __int64
#define N 21
ll dp[N][N][N][2],x,y,ans;//多开一个ok加快速度,把所有解全存起来
ll digit[N],flen;//flen吧最终q的长度保存起来
ll dfs(ll len,ll sin,ll qin,ll ok) {
if(!len) {
if(sin==x&&qin==y)return 1;
return 0;
}
if(sin>x||qin>y)return 0;
if(dp[len][sin][qin][ok]!=-1)
return dp[len][sin][qin][ok];
ll ans=0,maxx=ok?digit[len]:9,i;
for(i=0;i<=maxx;i++)
ans+=dfs(len-1,sin+(i==4),qin+(i==7),ok&&i==maxx);
dp[len][sin][qin][ok]=ans;//把所有情况保存起来
return ans;
}
ll f(ll n) {
ll len=0;
memset(dp,-1,sizeof(dp));
while(n) {
digit[++len]=n%10;
n/=10;
}
flen=len;//在询问时会用到
return dfs(len,0,0,1);
}
void dfs_answer(ll len,ll sin,ll qin,ll ok,ll kth) {//不断的递归调用自身直至求出最终结果
ll cnt,maxx=ok?digit[len]:9,i;
for(i=0;i<=maxx;i++) {
cnt=dfs(len-1,sin+(i==4),qin+(i==7),ok&&i==maxx);
if(cnt<kth)
kth-=cnt;
else
break;
}
ans=ans*10+i;//说明当第len个数是i时存在结果,求出的是第len位的值
if(len!=1)
dfs_answer(len-1,sin+(i==4),qin+(i==7),ok&&i==maxx,kth);//不断递归调用本身,顶多调用20次,每次的时间复杂度为0(1),因为每次调用dfs时的结果都已经保存起来了
}
int main() {
ll t,m,n,j,k,kk=0,q,low,high;
scanf("%I64d",&t);
while(t--) {
scanf("%I64d%I64d%I64d%I64d",&n,&m,&x,&y);
low=f(n);//求出0-n的nya数个数
high=f(m);//求出0-m的nya数个数
k=high-low;//n-m之间的个数
scanf("%I64d",&q);
printf("Case #%I64d:\n",++kk);
while(q--) {
scanf("%I64d",&j);
if(j>k)
printf("Nya!\n");
else {
ans=0;
j+=low;//计算0-m的第j个nya数
dfs_answer(flen,0,0,1,j);
printf("%I64d\n",ans);
}
}
}
return 0;}

最新文章

  1. windows平台下基于VisualStudio的Clang安装和配置
  2. Lamp(Ubuntu 12.04 LTS) 之 htaccess的使用
  3. 采集的GPS数据如何正确显示在arcgis和cad中
  4. sass中出现的中文问题
  5. 设计模式_State_状态模式
  6. SQl为表添加和删除列
  7. 24种设计模式--桥梁模式【Bridge Pattern】
  8. 「OC」block 和 protocol
  9. SpringMVC自定义配置消息转换器踩坑总结
  10. 在Fabric ChainCode中导入第三方包(以状态机为例)
  11. 【linux】Linux系统SELinux简介
  12. db mysql / mysql cluster 5.7.19 / performance
  13. CAS集成oauth2协议的支持
  14. try catch对Spring事务的影响
  15. linux动态库
  16. HTML 框架 frameset,frame
  17. deferred对象详解
  18. 使用Python Django在Ubuntu下搭建数据库型网站
  19. XHTML与HTML、HTML5的区别
  20. Linux系统下连接校园网Drcom客户端教程(广东工业大学)

热门文章

  1. 题解报告:hdu 1406 完数
  2. 转 ORA-12638: 身份证明检索失败
  3. 转 mysql oracle 指定rand随机数范围
  4. [转]linux之date命令MYSQL用户管理
  5. 微信小程序flex布局
  6. 关于 user agent ua
  7. wordpress在撰写新文章界面的显示选项按钮点击无反应的解决办法
  8. CAS介绍
  9. SQL优化基础 使用索引(一个小例子)
  10. Regular Expression Flavors