【AtCoder】ARC095 E - Symmetric Grid 模拟

【题目】E - Symmetric Grid

【题意】给定n*m的小写字母矩阵,求是否能通过若干行互换和列互换使得矩阵中心对称。n,m<=12。

【算法】模拟

【题解】首先行列操作独立,如果已确定行操作,那么两个在对称位置的列要满足条件必须其中一列反转后和另一列相同,或m为奇数且此列在中间。

已确定了行操作后,枚举每一列,找到它可以匹配的列直接匹配,后面如果矛盾了就直接无解(因为匹配的列都是确定的,不存在决策问题),复杂度O(nm^2)。

如何确定行操作?枚举每一行的匹配行,虽然这样理论上会枚举n^(n/2)种情况,但其中只有(n-1)!!种情况合法并进入下一过程,故复杂度为O((n-1)!!*nm^2),极限为17962560,实际上列枚举存在大量返回会更快,甚至直接枚举列匹配都能2ms AC。

代码来自:zhan8855

#include <cstdio>char c[15][15],d[15],e[15];
int i,m,n;inline bool dfs2(int x)
{if (x>m)return true;if (e[x])return dfs2(x+1);else{int t=0,r=0;for (int i=x;i<=m;i++)if (! e[i])t++;for (int i=x;i<=m;i++)if (! e[i]){e[x]=i,e[i]=x,r=1;for (int j=1;j<=n;j++)if ((c[j][x]!=c[d[j]][i]) || (c[d[j]][x]!=c[j][i])){r=0;break;}if(i==x){if(r&&(t&1)&&dfs2(x+1))return true;}else{if(r){if(dfs2(x+1))return true;else return false;}}/*if ((r) && ((t&1) || (i!=x)) && (dfs2(x+1)))return true;else if(i!=x)return false;*/e[x]=0,e[i]=0;}}return false;
}inline bool dfs1(int x)
{if (x>n)return dfs2(1);if (d[x])return dfs1(x+1);else{int t=0;for (int i=x;i<=n;i++)if (! d[i])t++;for (int i=x;i<=n;i++)if (! d[i]){d[x]=i,d[i]=x;if (((t&1) || (i!=x)) && (dfs1(x+1)))return true;d[x]=0,d[i]=0;}}return false;
}int main()
{scanf("%d%d",&n,&m);for (i=1;i<=n;i++)scanf("%s",c[i]+1);if (dfs1(1))puts("YES");elseputs("NO");return 0;
}
View Code

 

转载于:https://www.cnblogs.com/onioncyc/p/8849156.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Google TV设置Chromecast

Justin Duino贾斯汀杜伊诺(Justin Duino)Google changed up its streaming platform with the release of the Chromecast with Google TV. Instead of being a Cast-only device like Chromecasts before it, Google’s latest dongle runs the successor of Android TV. If y…

scala 方法、函数定义小结

2019独角兽企业重金招聘Python工程师标准>>> package scalapackage.testmethod/*** Created by Germmy on 2018/4/15.*/ object TesMethod {def main(args: Array[String]) {//定义方法的一种方法,高阶函数的一种定义方法def m1(x:Int)(y:Int)x*yval resm1(3)(4)pri…

ipad和iphone切图_如何在iPhone和iPad上密码保护照片

ipad和iphone切图Sometimes, you need to protect your iPhone or iPad photos from prying eyes that might also have access to your device. Unfortunately, Apple doesn’t provide an obvious, secure way to do this. However, there’s a work-around thanks to the No…

Java高级篇(二)——网络通信

网络编程是每个开发人员工具箱中的核心部分&#xff0c;我们在学习了诸多Java的知识后&#xff0c;也将步入几个大的方向&#xff0c;Java网络编程就是其中之一。 如今强调网络的程序不比涉及网络的更多。除了经典的应用程序&#xff0c;如电子邮件、Web浏览器和远程登陆外&…

Jerry和您聊聊Chrome开发者工具

2019独角兽企业重金招聘Python工程师标准>>> Chrome开发者工具是Jerry日常工作使用的三大调试器之一。虽然工具名称前面带了个"开发者", 但是它对非开发人员仍然有用。不信&#xff1f; 用Chrome打开我们常用的网站&#xff0c;按F12&#xff0c;在Consol…

win2008R2管理员密码修改文档

场景&#xff1a;忘记了win2008R2服务器的管理员密码。解决办法&#xff1a;1、 制作一个U盘启动盘&#xff1a;2、 系统通过U盘启动进入WINpe系统3、 在知道Win2008安装位置的情况下&#xff1b;查找C:\windows\system32\osk.exe 将osk.exe文件修改为&#xff1a;osk.exe.bat&…

第四周

7-2 选择法排序 &#xff08;20 分) 本题要求将给定的n个整数从大到小排序后输出。 输入格式&#xff1a; 输入第一行给出一个不超过10的正整数n。第二行给出n个整数&#xff0c;其间以空格分隔。 输出格式&#xff1a; 在一行中输出从大到小有序的数列&#xff0c;相邻数字间有…

来谈谈JAVA面向对象 - 鲁班即将五杀,大乔送他回家??

开发IDE为Eclipse或者MyEclipse。 首先&#xff0c;如果我们使用面向过程的思维来解决这个问题&#xff0c;就是第一步做什么&#xff0c;第二步做什么&#xff1f; 鲁班即将五杀&#xff0c;大乔送他回家 这个现象可以简单地拆分为两步&#xff0c;代码大概是这个样子的: publ…

Microsoft Teams的Outgoing Webhook开发入门

Microsoft Teams的应用程序有几种形式&#xff1a; TabsBotsConnectorsMessaging extensionsActivity feed integrationsOutgoing web hooks 这篇我们主要介绍如何使用 ASP.NET Core来开发最简单的Outgoing web hook。 什么是outgoing webhook Outgoing webhooks allow you t…

0418 jQuery笔记(添加事件、each、prop、$(this))

1.添加点击事件、each、prop、$(this) 1 //全选框的被动操作2 //定义一个标志保存最终状态3 var flag false;4 //为每一个选择框添加点击事件&#xff0c;数组.click()5 $(.chex).click(function(){6 //遍历数组&#xff0c;数组.each()7 …

使用dotnet template快速开发Microsoft Teams Outgoing Web Hook

在上一篇文章中&#xff0c;我们一步步从无到有在Microsoft Teams中开发了一个简单的Outgoing Webhook&#xff0c;并和我们本地的Web API应用程序产生交互&#xff0c;总结起来的步骤大概如下&#xff1a; 导航到“团队” Tab页&#xff0c; 选中需要建立的Channel, 选中“应…

Microsoft Teams:删除成员账户其历史聊天会发生什么?

介绍&#xff1a; 此博客文章的目的是演示从Office 365删除用户的账号后&#xff0c;此用户在Microsoft Teams群聊和私聊中的历史聊天记录会发生什么改变。 以下是Microsoft Teams聊天对话&#xff0c;其中Adele和其他团队成员正在参与对话&#xff1a; 此外, Adele和Mega还在…

Microsoft Teams:团队Owner离开公司后,我们该怎么做?

您是否曾在这么一个团队里&#xff0c;该团队唯一有Owner权限的人离开了公司&#xff1f;不幸的是,如果这个人不再在公司里&#xff0c;您可能觉得没有办法让其他团队成员再成为team的owner。我有一个简单易用的解决方案&#xff0c;但您需要成为Office 365租户的Admin或联系你…

python网络编程-socket编程

一、服务端和客户端 BS架构 &#xff08;腾讯通软件&#xff1a;serverclient&#xff09; CS架构 &#xff08;web网站&#xff09; C/S架构与socket的关系&#xff1a; 我们学习socket就是为了完成C/S架构的开发 二、OSI七层模型 互联网协议按照功能不同分为osi七层或tcp/ip五…

使用PowerShell配置Microsoft Teams

作为 IT 专业人员, 我一直在寻找自动化任务的方法, 并使日常操作简单。当使用Microsoft Teams时, 是否能够在团队中自动创建团队&#xff0c;渠道和设置对于Microsoft Teams组建的成功与否至关重要。PowerShell对Microsoft Teams的支持使您可以做到这一点&#xff0c;它为我提供…

Microsoft Teams的保留策略

Microsoft Teams保留策略现在可在Office 365安全性和合规性中心里进行配置 今天&#xff0c;我们很自豪地宣布&#xff0c;我们正在开始推出针对Microsoft Teams的保留策略。 推出预计将在未来几周内完成。 通过此次发布&#xff0c;Teams管理员可以使用Office 365安全性和合规…

八年溯源,如何巧搭区块链

虎嗅注&#xff1a;区块链正在逐步商业化&#xff0c;但最大的挑战是共识。 为什么这样说&#xff1f;因为商品的溯源防伪业务在过去正是因为缺乏信任感而没有得到普及&#xff0c;这是每个溯源从业者最大的感受。 在虎嗅虎跑团每两周一次线上分享会上&#xff0c;溯源链创始人…

数字签名过程及数字证书

数字签名是什么&#xff1f; 作者&#xff1a;David Youd 翻译&#xff1a;阮一峰 原文网址&#xff1a;http://www.youdzone.com/signature.html 1.鲍勃有两把钥匙&#xff0c;一把是公钥&#xff0c;另一把是私钥。 2.Bob把公钥送给他的朋友们-Pat、Doug、Susan-- 每人一把…

Teams与OneDrive for Business和SharePoint的关系

作为一个相对看重个人信息安全与隐私的人&#xff0c;个人附件等资料在Microsoft Teams中的存储方式、文件访问权限、可见范围问题引起了我的好奇。 众所周知&#xff0c;Teams包含3大主要的模块&#xff1a;单人聊天、团队、会议。那下面让我们一起来看一下&#xff0c;对这三…

hadoop学习笔记(二):centos7三节点安装hadoop2.7.0

环境win7vamvare10centos7 一、新建三台centos7 64位的虚拟机 master 192.168.137.100 root/123456 node1 192.168.137.101 root/123456 node2 192.168.137.102 root/123456 二、关闭三台虚拟机的防火墙&#xff0c;在每台虚拟机里面执行&#xff1a; systemctl sto…