【JZOJ4761】【NOIP2016提高A组模拟9.7】鼎纹
来源:互联网 发布:网站域名注册 编辑:程序博客网 时间:2024/06/04 18:46
题目描述
输入
输出
样例输入
2
3 4 4 2
1100
0110
1100
10
01
10
00
2 2 2 2
11
11
01
10
样例输出
YES
NO
数据范围
解法
由于鼎纹中的第一个1必须被铜模中的第一个1覆盖,那么就用铜模覆盖掉鼎纹的第一个1,相应地继续枚举,每枚举到一个1就覆盖一次。
代码
#include<iostream>#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;const char* fin="aP1.in";const char* fout="aP1.out";const int inf=0x7fffffff;const int maxn=2007;int read(){ char ch=getchar(); int x=0; while (ch<'0' || ch>'9') ch=getchar(); while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar(); return x;}int t,t1,n1,m1,n2,m2,i,j,k,l,sx[2],sy[2],tx[2],ty[2],tmp,tmd;char a[maxn][maxn];char b[maxn][maxn];int c[maxn*maxn][2],tot;int az[maxn],bz[maxn][maxn],id;int main(){ scanf("%d",&t); for (t1=1;t1<=t;t1++){ scanf("%d%d%d%d\n",&n1,&m1,&n2,&m2); sx[0]=sx[1]=inf; tx[0]=tx[1]=0; //---------------------------------------------------------- id++; for (i=1;i<=n1;i++) { scanf("%s",a[i]+1); for (j=1;j<=m1;j++){ if (a[i][j]=='1'){ sx[0]=min(sx[0],j); tx[0]=max(tx[0],j); az[i]=id; } } scanf("\n"); } for (i=1;i<=n1;i++) if (az[i]==id) {sy[0]=i;break;} for (i=n1;i;i--) if (az[i]==id) {ty[0]=i;break;} //---------------------------------------------------------- id++;tot=0; for (i=1;i<=n2;i++) { scanf("%s",b[i]+1); for (j=1;j<=m2;j++){ if (b[i][j]=='1'){ c[++tot][0]=i; c[tot][1]=j; if (tot==1) tmp=c[1][0],tmd=c[1][1]; c[tot][0]-=tmp; c[tot][1]-=tmd; sx[1]=min(sx[1],j); tx[1]=max(tx[1],j); az[i]=id; } } scanf("\n"); } for (i=1;i<=n2;i++) if (az[i]==id) {sy[1]=i;break;} for (i=n2;i;i--) if (az[i]==id) {ty[1]=i;break;} if (sx[0]==inf) { printf("YES\n"); continue; } if (sx[1]==inf) { printf("NO\n"); continue; } //---------------------------------------------------------- //printf("%d %d %d %d %d %d %d %d\n",sx[0],sy[0],tx[0],ty[0],sx[1],sy[1],tx[1],ty[1]); bool no=false; for (i=sy[0];i<=ty[0];i++){ for (j=sx[0];j<=tx[0];j++){ if (bz[i][j]<t1 && a[i][j]=='1'){ for (k=1;k<=tot;k++){ tmp=i+c[k][0]; tmd=j+c[k][1]; if (tmp<=ty[0] && tmd<=tx[0] && bz[tmp][tmd]<t1 && a[tmp][tmd]=='1') bz[tmp][tmd]=t1; else{ printf("NO\n"); no=true; break; } } } if (no) break; } if (no) break; } if (!no) printf("YES\n"); } return 0;}
1 0
- 【JZOJ4761】【NOIP2016提高A组模拟9.7】鼎纹
- 鼎纹【NOIP2016提高A组模拟9.7】
- 【NOIP2016提高A组模拟9.7】总结
- 【NOIP2016提高A组模拟9.7】千帆渡
- 【JZOJ4762】【NOIP2016提高A组模拟9.7】千帆渡
- 【JZOJ4763】【NOIP2016提高A组模拟9.7】旷野大计算
- 【NOIP2016提高A组模拟7.15】立方体
- 计数【NOIP2016提高A组模拟7.15】
- 【NOIP2016提高A组模拟7.17】寻找
- 【NOIP2016提高A组模拟7.17】寻找
- 【NOIP2016提高A组模拟7.17】锦标赛
- 【NOIP2016提高A组模拟7.17】锦标赛
- 【NOIP2016提高A组模拟7.17】锦标赛
- 【NOIP2016提高A组模拟7.15】修路
- 【NOIP2016提高A组模拟7.15】计数
- 寻找【NOIP2016提高A组模拟7.17】
- 锦标赛【NOIP2016提高A组模拟7.17】
- 【NOIP2016提高A组模拟8.14】传送带
- 隐藏android系统的状态栏和导航栏
- UPROPERTY属性修饰符
- Oracle Minus关键字 不包含 取差集
- *浙大PAT甲级 1110 判断是否为完全二叉树
- javax.servlet.http.HttpServletRequest导致新导入的项目报错
- 【JZOJ4761】【NOIP2016提高A组模拟9.7】鼎纹
- FusionCharts在Java中的基本使用!
- iOS 开发 RGB 色值转换
- 关于集成开发环境eclipse
- ActiveMQ高级特性:虚拟Destinations实现消费者分组与简单路由
- 雅虎面试题-你真的了解HTML吗?
- NOIP提高组 千帆渡
- 并行编译 Xoreax IncrediBuild
- mysql存储过程例子cursor