题目: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. ag-grid 表格中添加图片

    ag-grid是一种非常好用的表格,网上搜索会有各种各样的基本用法,不过对于在ag-grid 表格中添加图片我没有找到方法,看了官方的文档,当然英文的自己也是靠网页翻译,最后发现有这么一个例子,我知道 ...

  2. 写的一个双向链表,测试OK

    #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef struct DoubleLi ...

  3. Go-内存To Be

    做一个快乐的互联网搬运工- 逃逸分析 逃逸分析的概念 在编译程序优化理论中,逃逸分析是一种确定指针动态范围的方法——分析在程序的哪些地方可以访问到指针. 它涉及到指针分析和形状分析. 当一个变量(或对 ...

  4. ECG 项目预研

    1. 数据的采集 智能安全帽,流数据,鉴于数据量大,应该是采集到云平台上,然后在云平台上对数据处理,是一种典型的物联网+大数据应用场景,考虑使用AWS或者阿里云,然后搭建Hadoop/Spark 环境 ...

  5. NYOJ 654喜欢玩warcraft的ltl(01背包/常数级优化)

    传送门 Description ltl 非常喜欢玩warcraft,因为warcraft十分讲究团队整体实力,而他自己现在也为升级而不拖累团队而努力. 他现在有很多个地点来选择去刷怪升级,但是在每一个 ...

  6. linux下的sleep()和usleep()的使用和区别

    函数名: sleep头文件: #include<windows.h> // 在VC中使用带上头文件              #include<unistd.h>    // ...

  7. 洛谷P3379 【模板】最近公共祖先(LCA)——LCA

    给一手链接 https://www.luogu.com.cn/problem/P3379 算是lca的模板吧 #include<cstdio> #include<cstring> ...

  8. C#=>递归反转栈

    原理,递归反转栈 using System; using System.Collections.Generic; using System.Linq; using System.Threading.T ...

  9. 获取Linux内核未导出符号的几种方式

    从Linux内核的2.6某个版本开始,内核引入了导出符号的机制.只有在内核中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL导出的符号才能在内核模块中直接使用.然而,内核并没有导出所 ...

  10. IEnumerable和IEnumerator 详解 分类: C# 2014-12-05 11:47 18人阅读 评论(0) 收藏

    原:<div class="article_title"> <span class="ico ico_type_Original">&l ...