CF 778D Parquet Re-laying——构造
题目: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——构造的更多相关文章
- CodeForces 778D Parquet Re-laying 构造
题意: 有两个\(n \times m\)的矩阵\(A,B\),都是由\(1 \times 2\)的砖块铺成,代表初始状态和结束状态 有一种操作可以把两个砖块拼成的\(2 \times 2\)的矩形旋 ...
- cf 605B B. Lazy Student 构造 好题
题意: 一个n个节点的图,有m条边,已知这个图的一个mst 现在如果我们知道这个图的m条边,和知道mst的n-1条边是哪些,问能不能构造出一个满足条件的图 思路:排序+构造 数组deg[i]表示节点i ...
- CF C. Vladik and fractions——构造题
题目 构造一组 $x, y, z$,使得对于给定的 $n$,满足 $\frac{1}{x} + \frac{1}{y} + \frac{1}{z} = \frac{2}{n}$. 分析: 样例二已 ...
- CodeFirst 初恋
CodeFirst 初恋 原著:Prorgamming Entity Framework Entitywork Code First 大家好! 我是AaronYang,这本书我也挺喜欢的,看了一半了, ...
- 【AaronYang风格】第一篇 CodeFirst 初恋
原著:Prorgamming Entity Framework Entitywork Code First 大家好! 我是AaronYang,这本书我也挺喜欢的,看了一半了,今晚也没 ...
- BZOJ1086: [SCOI2005]王室联邦(贪心,分块?)
Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 2610 Solved: 1584[Submit][Status] ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- 慎用create table as select,一定要注意默认值的问题
再做一些数据迁移时候,很多人会使用create table as select * from table where id=-1的方式来年建立一摸一样的表,但是这样做有个很大的弊端,不能将原表中的d ...
- RESTful_URI资源
目录 目录 RESTful的资源 URI 标识资源 URL 定位资源 URI与URL的区别 为什么使用资源的概念 对资源的操作 URI的设计 RESTful的资源 在RESTful基础知识篇中,介绍了 ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站
环境准备 三台主机: 一台主机部署jenkins和作为ansible的管理主机 一台主机部署gitlab和ansible的节点1 一台主机为ansible的节点2 防火墙和apache服务关闭 第一步 ...
- java 创建文件 呵呵 成功
package aaa;import java.util.Date;import java.util.regex.Matcher;import java.util.regex.Pattern;impo ...
- CentOS 7安装图形界面
之前公司的服务器都是用的CentOS 的系统,需要安装图形界面的时候我会执行以下命令 yum -y groupinstall "X Window System" "Fon ...
- 4期Web安全基础
介绍了web安全的各种常见漏洞.视频卡顿,建议直接看网易出品的白帽子视频. 类似的教程还有,网易白帽子的教程:参考简书https://www.jianshu.com/p/1b372ca96b87 在看 ...
- Learning OSG programing---Multi Camera in Multi window 在多窗口中创建多相机
这个例子演示了在多个窗口中创建多个相机,函数的代码如下: void multiWindowMultipleCameras(osgViewer::Viewer& viewer,bool mult ...
- python的包
1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法 2. 包是目录级的(文件夹级),文件夹是用 ...
- python学习第十五天字典的创建及增删改查操作方法
字典是python比较常见的数据类型,跟列表一样,比如的字典的创建,字典的常见的操作的方法,增加,删除,修改,查找等方法,字典的一共的数据方法为 keys() values() fromkeys() ...
- 关于URL和URI的最简单理解
以下面网址为例: http://www.sina.com/news/1.html 那么,http://www.sina.com/news/1.html就表示URL,用于标识互联网中的某一资源:/new ...