北邮秋季赛  Confusing Problem

这个题比赛的时候没想出来,当时以为是数位dp,但是状态几乎都没法表示呀,单纯的以为  单独匹配A + 匹配B的 - 匹配A和B的,然后就没有然后了……

赛后看题解说是ac自动机+数位dp,猛然发现用ac自动机来构造状态时再合适不过了,题解是这样说的:

B 数位dp。

状态是dfs(i, m, s, e),i为当前做到前i位,m为是否已经匹配了两个串,s为走到自动机的节点s(或者kmp也能做),e为前i位是否是上限。

但是我敲了,仔细调试发现光有这些状态还是不行的,还要考虑到前缀是否为0,如果为0 ,那么当前i位可以为0,否则就必须从1开始

然后状态表示就是: dp[ pos ][ state] [ match ] [  zero ]  表示当前做到第i位,走到ac自动机state节点,目前是否匹配A或者B,前缀是否为0的个数

#include <cmath>
#include <cstdio>
#include <iostream>
#include <cstring>using namespace std;typedef long long ll;
const int NODE=150;
int chd[NODE][10],word[NODE],fail[NODE],sz;
int dig[50];
ll dp[50][NODE][2][2];void ins(ll n)
{int pos=0;for(;n;n/=10) dig[pos++]=n%10;int p=0;for(int i=pos-1;i>=0;i--){if(!chd[p][dig[i]]){memset(chd[sz],0,sizeof(chd[sz]));word[sz]=0;chd[p][dig[i]]=sz++;}p=chd[p][dig[i]];}word[p]=1;
}
int Que[NODE];
void ac()
{int *s=Que,*e=Que;for(int i=0;i<10;i++)if(chd[0][i]){*e++=chd[0][i];fail[chd[0][i]]=0;}while(s!=e){int p=*s++;for(int i=0;i<10;i++)if(chd[p][i]){*e++=chd[p][i];fail[chd[p][i]]=chd[fail[p]][i];word[chd[p][i]]|=word[fail[chd[p][i]]];}else chd[p][i]=chd[fail[p]][i];}
}ll dfs(int pos,int ok,int state,bool zero,bool doing)
{if(pos<0) return ok;if(!doing&&dp[pos][state][ok][zero]!=-1) return dp[pos][state][ok][zero];int end=doing?dig[pos]:9;ll ret=0;for(int i=zero?0:1;i<=end;i++){int newstate=chd[state][i];ret+=dfs(pos-1,ok|word[newstate],newstate,zero&&!i,doing&&i==end);}if(!doing) dp[pos][state][ok][zero]=ret;return ret;
}ll cal(ll n)
{int pos=0;for(;n;n/=10) dig[pos++]=n%10;return dfs(pos-1,0,0,1,1);
}int main()
{ll L,R,A,B;int T;scanf("%d",&T);while(T--){scanf("%lld%lld %lld%lld",&L,&R,&A,&B);sz=1;memset(chd[0],0,sizeof(chd[0]));ins(A);ins(B);ac();memset(dp,-1,sizeof(dp));printf("%lld\n",cal(R)-cal(L-1));}return 0;
}

Confusing Problem相关推荐

  1. 数据库中各表关联图及其说明_如何在图中思考:图论及其应用的说明性介绍

    数据库中各表关联图及其说明 by Vardan Grigoryan (vardanator) 由Vardan Grigoryan(vardanator) 如何在图中思考:图论及其应用的说明性介绍 (H ...

  2. linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.

    所有的base 都要取消注释 mirrorlist 加上注释 另外所有的enable都要设为零 目录 今天是要yum命令安装EPEL仓库后 yum install epel-release 突然发现y ...

  3. A + B Problem

    1001: A + B Problem Description 计算 A + B. Input 多组测试数据,每组测试数据占一行,包括2个整数. Output 在一行中输出结果. Sample Inp ...

  4. Error:(49, 1) A problem occurred evaluating project ':guideview'. Could not read script 'https://r

    出现问题如下: Error:(49, 1) A problem occurred evaluating project ':guideview'. > Could not read script ...

  5. #418 Div2 Problem B An express train to reveries (构造 || 全排列序列特性)

    题目链接:http://codeforces.com/contest/814/problem/B 题意 : 有一个给出两个含有 n 个数的序列 a 和 b, 这两个序列和(1~n)的其中一个全排列序列 ...

  6. ADPRL - 近似动态规划和强化学习 - Note 3 - Stochastic Infinite Horizon Problem

    Stochastic Infinite Horizon Problem 3.Stochastic Infinite Horizon Problem 定义3.1 无限范围的马尔可夫决策过程 (Marko ...

  7. ADPRL - 近似动态规划和强化学习 - Note 2 - Stochastic Finite Horizon Problem

    2. Stochastic Finite Horizon Problem 在这一节中主要介绍了随机DP算法来解决不确定性下的有限地范围问题,如Denition 1.4所述,它被表述为一个组合优化问题. ...

  8. There was a problem confirming the ssl certificate ……

    在安装一个Python库onetimepass时发生下面的问题: pip install onetimepass Could not fetch URL https://pypi.python.org ...

  9. HDU 1757 A Simple Math Problem

    Problem Description Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x & ...

  10. The C10K problem原文翻译

    原文地址:http://www.cnblogs.com/fll/archive/2008/05/17/1201540.html The C10K problem 如今的web服务器需要同时处理一万个以 ...

最新文章

  1. python有趣代码-你都知道哪些有趣的Python代码?
  2. Python通过一个网页地址获得网页标题Title
  3. Linux shell编程:状态变量
  4. proxytable代理不生效_民法典房屋买卖合同卖方代签合同生效吗
  5. Python:通过SNMP协议获取华为交换机的ARP地址表
  6. 对大文件进行只打印过滤条件到列表元素(优化)
  7. oracle扩容bigfile,Oracle10g BIGFILE表空间带来的好处
  8. sql语句分析是否走索引_mysql sql语句执行时是否使用索引检查方法
  9. 自旋锁 轻量锁_Java知识进阶-程序员升往架构师必经之路-自旋锁-知识铺
  10. golang 中strconv包用法
  11. 给程序员的10条建议,吐血推荐!
  12. 系统调用之Write
  13. C# List最大值最小值问题 List排序问题 List Max/Min
  14. Bill Gates推荐,人工智能必读的三本书 -《终极算法》,《超级智能》和《终极发明》zz
  15. 中国最美的100首古代情诗
  16. 手机网络通过USB共享给台式机电脑
  17. 《谷物大脑》书中的精髓:如何通过四星期行动计划打造健康身体?
  18. 福利福利!!!!!!!!往这看!!!!!
  19. gromacs ngmx_gromacs初学入门
  20. android 设备序列号_如何查找您的Android设备的序列号

热门文章

  1. android 长按保存图片,安卓机上base64图片无法在微信中长按保存?
  2. win10系统安装CH340驱动
  3. led灯光衰怎么解决_揭秘LED灯具光衰原因
  4. pdf转换成word后有文字叠加_将PDF转换成Word文档后,为什么字体全变了?
  5. VMware 8安装Mac OS X 10.8 Lion
  6. 如何系统学习计算机编程?自学还是培训?怎么选?
  7. 【计算机硬件系统设计(华科)——运算器设计(Logisim 实现)】
  8. python获取第一个字符_Python:获取列表中第一个字符串的第一个字符?
  9. 项目管理经验-豆知识
  10. office安装找不到office.zh cn的解决办法