题目:http://codeforces.com/problemset/problem/778/D

  完全没思路……就看了题解。

  很好地思路是考虑操作可逆,所以起始状态和最终状态都变到一个中转状态,即都是横着的条,或者都是竖着的条。

  比如要做成都是横着的条,考虑从左上到右下依次做好即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,lm=1e5,M=lm+;
int n,m,tot; bool fg;
char a[N][N],b[N][N];
struct Node{
int x,y;
Node(int x=,int y=):x(x),y(y) {}
}s[M],prn[M];
bool chk(int x,int y)
{
if(a[x][y]=='L'&&a[x+][y]=='L')return true;
if(a[x][y]=='U'&&a[x][y+]=='U')return true;
return false;
}
void rot(int x,int y)
{
s[++tot]=Node(x,y);
if(a[x][y]=='U')
{
a[x][y]=a[x+][y]='L';
a[x][y+]=a[x+][y+]='R';
}
else
{
a[x][y]=a[x][y+]='U';
a[x+][y]=a[x+][y+]='D';
}
}
void cz1()//horizenal
{
for(int i=;i<=n;i++)
for(int j=;j<=m;j+=)
{
if(a[i][j]=='L')continue;
int x=i,y=j;
while(!chk(x,y))
{
if(a[x+][y+]=='L')
{rot(x,y+);break;}
x++;y++;
}
while()
{
rot(x,y); if(x==i)break;
rot(x-,y);x--;y--;
if(tot>lm){fg=;return;}
}
}
}
void cz2()
{
for(int i=;i<=n;i+=)
for(int j=;j<=m;j++)
{
if(a[i][j]=='U')continue;
int x=i,y=j;
while(!chk(x,y))
{
if(a[x+][y+]=='U')
{rot(x+,y);break;}
x++;y++;
}
while()
{
rot(x,y); if(x==i)break;
rot(x,y-); x--;y--;
if(tot>lm){fg=;return;}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%s",a[i]+);
for(int i=;i<=n;i++)
scanf("%s",b[i]+);
if((m&)==)cz1(); else cz2();
if(fg){puts("-1");return ;}
int ans=tot; tot=;
for(int i=;i<=ans;i++)prn[i]=s[i];
memcpy(a,b,sizeof b);
if((m&)==)cz1(); else cz2();
if(fg||ans+tot>lm){puts("-1");return ;}
for(int i=tot;i;i--)prn[++ans]=s[i];
printf("%d\n",ans);
for(int i=;i<=ans;i++)
printf("%d %d\n",prn[i].x,prn[i].y);
return ;
}

CF 778D Parquet Re-laying——构造的更多相关文章

  1. CodeForces 778D Parquet Re-laying 构造

    题意: 有两个\(n \times m\)的矩阵\(A,B\),都是由\(1 \times 2\)的砖块铺成,代表初始状态和结束状态 有一种操作可以把两个砖块拼成的\(2 \times 2\)的矩形旋 ...

  2. cf 605B B. Lazy Student 构造 好题

    题意: 一个n个节点的图,有m条边,已知这个图的一个mst 现在如果我们知道这个图的m条边,和知道mst的n-1条边是哪些,问能不能构造出一个满足条件的图 思路:排序+构造 数组deg[i]表示节点i ...

  3. CF C. Vladik and fractions——构造题

    题目 构造一组 $x, y, z$,使得对于给定的 $n$,满足 $\frac{1}{x}  + \frac{1}{y} + \frac{1}{z} =  \frac{2}{n}$. 分析: 样例二已 ...

  4. CodeFirst 初恋

    CodeFirst 初恋 原著:Prorgamming Entity Framework Entitywork Code First 大家好! 我是AaronYang,这本书我也挺喜欢的,看了一半了, ...

  5. 【AaronYang风格】第一篇 CodeFirst 初恋

             原著:Prorgamming Entity Framework Entitywork Code First 大家好! 我是AaronYang,这本书我也挺喜欢的,看了一半了,今晚也没 ...

  6. BZOJ1086: [SCOI2005]王室联邦(贪心,分块?)

    Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 2610  Solved: 1584[Submit][Status] ...

  7. CF #296 (Div. 1) B. Clique Problem 贪心(构造)

    B. Clique Problem time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  8. cf 323A A. Black-and-White Cube 立体构造

    A. Black-and-White Cube time limit per test 1 second memory limit per test 256 megabytes input stand ...

  9. cf 323A A. Black-and-White Cube 立体构造 不知道为什么当k为奇数时构造不出来 挺有趣的题目吧

    A. Black-and-White Cube time limit per test 1 second memory limit per test 256 megabytes input stand ...

随机推荐

  1. 今天刚到货的小米平板2,就出现dnx fastboot mode一直卡死黑屏

    http://bbs.xiaomi.cn/t-11786254 今天刚到货的小米平板2,就出现dnx fastboot mode一直卡死黑屏, 发表在晒机评测2015-11-30 14:22:57 来 ...

  2. Nginx 实现全站 HTTPS(基于 Let's Encrypt 的免费通配符证书)

    单域名证书的生成可以 参考这里. acme.sh 项目中文文档 Let's Encrypt 在 18 年 1 月份推出了 ACME v2,支持通配符域名证书,对小网站.个人站长的友好度进一步增加. 常 ...

  3. iframe父窗口和子窗口的调用方法

    iframe 父窗口和子窗口的调用方法父窗口调用子窗口 iframe_name.iframe_document_object.object_attribute = attribute_value 例子 ...

  4. Step-by-step from Markov Process to Markov Decision Process

    In this post, I will illustrate Markov Property, Markov Reward Process and finally Markov Decision P ...

  5. SQLMap使用总结

    支持模式:布尔/时间/报错/联合查询/堆查询 支持数据库:MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM ...

  6. Mac002--Git安装

    Mac--Git安装 注意:在安装Git前,可先安装homebrew,应用brew命令安装Git即可. 一.Mac 安装homebrew 参考博客:https://blog.csdn.net/yuex ...

  7. < 备考CET6 - 替换词 >

    替换词 名词 结果 Result consequence 人 People, person citizen, individual 发展 Development advancement,progres ...

  8. Node.js 中监听 redis key 过期事件

    It is in fact possible to listen to the “expired” type keyevent notification using a subscribed clie ...

  9. node的fs模块使用————node

    node的fs模块使用----node fs模块是调用文件的模块. var fs=require('fs'); //引用模块. //查看文件信息 fs.stat('index.txt',functio ...

  10. vue,一路走来(5)--微信登录

    微信登录 今天又是周末了,想着博客还没记录完成.是的,下面记录一下微信登录遇到的问题. 在我的项目中,个人中心是需要完成授权登录才可以访问的,首先在定义路由的时候就需要多添加一个自定义字段requir ...