题意:一个矩阵上面有0~9的数字,可以从任意一个格子出发,每次根据格子上的数字会前进到另一个格子(或原地不动),现在给出q个数位串,问是否有走法可以取出这个串(走到格子上的时候可以不取)。

思路:发现每个点的出度至多为1,那么可以预处理出走到这个格子后取某个数字最近的格子是哪个(f[i][j][0-9]),然后用队列存下开头,在做一遍贪心就可以了

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. int cnt,sz=,f[*][],c[][],id[][],vis[][],n,m,a[],b[],ans[*],d[*];
  7. int read(){
  8. char ch=getchar();int f=,t=;
  9. while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
  10. while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
  11. return t*f;
  12. }
  13. void dfs(int x,int y){
  14. int dx=x+a[c[x][y]],dy=y+b[c[x][y]];
  15. if (dx<||dx>n||dy<||dy>m) f[id[x][y]][c[x][y]]=id[x][y];
  16. else{
  17. f[id[x][y]][c[x][y]]=id[dx][dy];
  18. if (!vis[dx][dy]) {vis[dx][dy]=;dfs(dx,dy);}
  19. for (int i=;i<=;i++)
  20. if (i!=c[x][y])
  21. f[id[x][y]][i]=f[id[dx][dy]][i];
  22. }
  23. }
  24. int main(){
  25. n=read();m=read();int T=read();cnt=;
  26. for (int i=;i<=n;i++){
  27. char s[];
  28. scanf("%s",s+);
  29. for (int j=;j<=m;j++){
  30. c[i][j]=s[j]-'';id[i][j]=++cnt;d[cnt]=c[i][j];
         }
  31. }
       char s[1000005];
  32. for (int i=;i<=;i++)
  33. a[i]=read(),b[i]=read();
  34. for (int i=;i<=n;i++)
  35. for (int j=;j<=m;j++)
  36. if (!vis[i][j]){
  37. vis[i][j]=;
  38. ans[++sz]=id[i][j];
  39. dfs(i,j);
  40. }while (T--){
  41. scanf("%s",s+);bool flag=false;
  42. for (int i=;i<=sz;i++){
  43. int x=ans[i];
  44. for (int j=;j<=strlen(s+);j++){
  45. x=f[x][s[j]-''];if (x<=) break;
  46. }
  47. if (x>) {flag=true;break;}
  48. }
  49. if (flag) printf("YES\n");else printf("NO\n");
  50. }
  51. }

codeforces 596E Wilbur and Strings的更多相关文章

  1. Codeforces Round #331 (Div. 2) E. Wilbur and Strings dfs乱搞

    E. Wilbur and Strings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/596 ...

  2. Codeforces 385B Bear and Strings

    题目链接:Codeforces 385B Bear and Strings 记录下每一个bear的起始位置和终止位置,然后扫一遍记录下来的结构体数组,过程中用一个变量记录上一个扫过的位置,用来去重. ...

  3. Codeforces 482C Game with Strings(dp+概率)

    题目链接:Codeforces 482C Game with Strings 题目大意:给定N个字符串,如今从中选定一个字符串为答案串,你不知道答案串是哪个.可是能够通过询问来确定, 每次询问一个位置 ...

  4. 【24.34%】【codeforces 560D】Equivalent Strings

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  5. CodeForces 682D Alyona and Strings (四维DP)

    Alyona and Strings 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/D Description After re ...

  6. Codeforces 596D Wilbur and Trees

    http://codeforces.com/contest/596/problem/D 题目大意: 有n棵树排成一排,高度都为h. 主人公要去砍树,每次等概率地随机选择没倒的树中最左边的树或者最右边的 ...

  7. codeforces 518A. Vitaly and Strings

    A. Vitaly and Strings time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. Codeforces 149 E. Martian Strings

    正反两遍扩展KMP,维护公共长度为L时.出如今最左边和最右边的位置. . .. 然后枚举推断... E. Martian Strings time limit per test 2 seconds m ...

  9. Codeforces 985 F - Isomorphic Strings

    F - Isomorphic Strings 思路:字符串hash 对于每一个字母单独hash 对于一段区间,求出每个字母的hash值,然后排序,如果能匹配上,就说明在这段区间存在字母间的一一映射 代 ...

随机推荐

  1. vue之props父子组件之间的谈话

    眨眼就来杭州两年了,时间真快. 我们今天来说说vue的一个api---->props 首先我们先看看一个例子,是我一个项目中写的. 看到这个:有木有一点懂了.要是没懂,继续往下看 这里我们用到了 ...

  2. Solr记录-solr文档xml

    Solr添加文档(XML) 在上一章中,我们学习解释了如何向Solr中添加JSON和.CSV文件格式的数据.在本章中,将演示如何使用XML文档格式在Apache Solr索引中添加数据. 示例数据 假 ...

  3. bzoj千题计划200:bzoj3106: [cqoi2013]棋盘游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=3106 白棋如果第一步不能赢,那么一定输 因为可以黑棋走的距离比白棋大,黑棋可以下一步吃掉白棋,也可以 ...

  4. bzoj千题计划183:bzoj1197: [HNOI2006]花仙子的魔法

    http://www.lydsy.com/JudgeOnline/problem.php?id=1197 题意转化:在n维空间中放m个n维球,问最多将空间分成几部分 f[i][j] 表示在i维空间中放 ...

  5. 深度学习 vs. 概率图模型 vs. 逻辑学

    深度学习 vs. 概率图模型 vs. 逻辑学 摘要:本文回顾过去50年人工智能(AI)领域形成的三大范式:逻辑学.概率方法和深度学习.文章按时间顺序展开,先回顾逻辑学和概率图方法,然后就人工智能和机器 ...

  6. [转载]ASP.NET Error – Adding the specified count to the semaphore would cause it to exceed its maximum count

    http://jwcooney.com/2012/08/13/asp-net-error-adding-the-specified-count-to-the-semaphore-would-cause ...

  7. [整理]javascript压缩、格式化

    1.使用packer来压缩JS文件 packer工具在线版:http://dean.edwards.name/packer/ 通过packer对js打包压缩的同时,执行Base62 encode编码后 ...

  8. ASP.NET生成二维码

    下面使用ThoughtWorks.QRCode.dll这个类库,实现生成二维码 使用时需要增加:下面三个命名空间 using ThoughtWorks.QRCode.Codec; using Thou ...

  9. TC-572-D1L2 (双向搜索+记忆化)

    solution: 这一题是比较难实现的双向搜索题:(字符串+双向搜索+hash记忆化) 我们可以先把K的前半部分枚举出来,并将得出的所有结果和题目给的n个数的每一个数的前半部分都比对一遍,得到它和每 ...

  10. MFC小型工具通用界面框架CLIST控件+右键菜单功能

    MFC-小型工具通用界面框架 0x1 场景 由于工作需要我会写代码开发工具给客户或者同事用.代码都能实现,但写个黑乎乎的命令行工具给别人用确实显得不够专业,用别人写好的成型工具又担心有后门. 所以掌握 ...