codeforces 596E Wilbur and Strings
题意:一个矩阵上面有0~9的数字,可以从任意一个格子出发,每次根据格子上的数字会前进到另一个格子(或原地不动),现在给出q个数位串,问是否有走法可以取出这个串(走到格子上的时候可以不取)。
思路:发现每个点的出度至多为1,那么可以预处理出走到这个格子后取某个数字最近的格子是哪个(f[i][j][0-9]),然后用队列存下开头,在做一遍贪心就可以了
#include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> int cnt,sz=0,f[201*201][10],c[201][201],id[201][201],vis[201][201],n,m,a[10],b[10],ans[201*201],d[201*201]; int read(){char ch=getchar();int f=1,t=0;while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();}return t*f; } void dfs(int x,int y){int dx=x+a[c[x][y]],dy=y+b[c[x][y]];if (dx<1||dx>n||dy<1||dy>m) f[id[x][y]][c[x][y]]=id[x][y];else{f[id[x][y]][c[x][y]]=id[dx][dy];if (!vis[dx][dy]) {vis[dx][dy]=1;dfs(dx,dy);}for (int i=0;i<=9;i++)if (i!=c[x][y])f[id[x][y]][i]=f[id[dx][dy]][i];} } int main(){n=read();m=read();int T=read();cnt=0;for (int i=1;i<=n;i++){char s[2005];scanf("%s",s+1);for (int j=1;j<=m;j++){c[i][j]=s[j]-'0';id[i][j]=++cnt;d[cnt]=c[i][j]; }} char s[1000005];for (int i=0;i<=9;i++)a[i]=read(),b[i]=read();for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (!vis[i][j]){vis[i][j]=1;ans[++sz]=id[i][j];dfs(i,j);}while (T--){scanf("%s",s+1);bool flag=false;for (int i=1;i<=sz;i++){int x=ans[i];for (int j=1;j<=strlen(s+1);j++){x=f[x][s[j]-'0'];if (x<=0) break;}if (x>0) {flag=true;break;}}if (flag) printf("YES\n");else printf("NO\n");} }
转载于:https://www.cnblogs.com/qzqzgfy/p/5682558.html
codeforces 596E Wilbur and Strings相关推荐
- codeforces 596E Wilbur and Strings(DFS)
题目链接 E. Wilbur and Strings time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- CodeForces - 798B Mike and strings
B. Mike and strings time limit per test2 seconds memory limit per test256 megabytes inputstandard in ...
- CodeForces 596B Wilbur and Array 贪心
给出原始{ai}={0},{bi}.每次修改{ai..n}+1或-1,求最小操作次数使{ai}=={bi}. 累计相邻两数差即可. 因为差最大10^9,数字有2*10^5,要long long. #i ...
- Codeforces 596D Wilbur and Trees
http://codeforces.com/contest/596/problem/D 题目大意: 有n棵树排成一排,高度都为h. 主人公要去砍树,每次等概率地随机选择没倒的树中最左边的树或者最右边的 ...
- Codeforces 149 E. Martian Strings
正反两遍扩展KMP,维护公共长度为L时,出现在最左边和最右边的位置.... 然后枚举判断... E. Martian Strings time limit per test 2 seconds mem ...
- CodeForces - 1213E Two Small Strings(暴力+构造)
题目链接:点击查看 题目大意:给出一个字符串s和字符串t,s和t的长度皆为2,现在要求我们构造出一个字符串res,他的长度是3*n,要求字母a和字母b还有字母c各出现3次,并满足字符串s和字符串t不能 ...
- Codeforces 596D Wilbur and Trees dp (看题解)
一直在考虑, 每一段的贡献, 没想到这个东西能直接dp..因为所有的h都是一样的. #include<bits/stdc++.h> #define LL long long #define ...
- CodeForces 596C Wilbur and Points
先对n个点分类,然后按题意要求构造,构造的时候判断这个点的右上方之前是否有点,判断可以用线段树来操作. #include<cstdio> #include<cstring> # ...
- CodeForces 596B Wilbur and Array
简单题,一个一个操作,最后就是答案. #include<cstdio> #include<cstring> #include<cmath> #include< ...
最新文章
- Hazelcast集群服务(2)——Hazelcast基本配置
- Linux文件查找之findlocate
- python控制鼠标_如何使用Python在Mac中控制鼠标?
- 富文本框让最大四百像素_富文本框的使用
- 基于python的分布式扫描器_一种基于python的大数据分布式任务处理装置的制作方法...
- 城轨的两类时钟系统均同步于_推介中央电视台4K IP化移动外场系统搭建中解决的主要问题...
- springboot学习笔记1
- 计算机知识脑筋急转弯,10道智力题图片及答案大全|2018年朋友圈最烧脑的10道智力题 附答案_最火软件站...
- 一氧化碳(CO)荧光探针cas855751-82-5,二氧化硫荧光探针 激发波长653 nm,发射波长836 nm-齐岳介绍
- 透视表学习(四)想要做好数据分析必知必会排序操作
- 学会 Python 到底能干嘛?我们整理出了 7 大工作方向……
- 自动驾驶上的三种感知传感器(激光、毫米波雷达和摄像头)优缺点比较
- 如何区分项目组合管理,项目集管理,和项目管理
- 大话设计模式之爱你一万年:大话设计模式之爱你一万年由来
- 网页调起支付宝付款和微信付款
- 【EagleEye】2020-ECCV-EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning-论文详解
- 哪种程序员最挣钱?平均月薪30.8K,网友说这是掌握世界的技术
- 2021华数杯数学建模选题建议
- 采样率150KSPS同步触发多板卡同步2路RS485D的3U PXIE采集卡
- 王者荣耀 微信登录 服务器找不到,王者荣耀微信无法登录是怎么回事 具体解决方法...