Description

给你一个3*N的网格,位置为(i,j)的网格上的数为i+3(j-1)。每次选一个3*3的网格旋转180度,问最后能否使得网格(i,j)的值为ai,j。(5≤N≤105

如图:

Solution

依图可看出,所谓的旋转就是将选择的3*3网格左右列交换,并且3列都进行翻转。

设正列(如1,2,3)为小写字母,反列(如3,2,1)为大写字母。

假如有相邻5列:

a b c d e

C B A d e

C B E D a

e b c D a

e b A d C

a B E d C

a B c D e

a d C b e

c D A b e

c B a d e

A b C d e

我们可以在有5列可供操纵的情况下将任意相隔1列的两列翻转而不影响其他。

在最终答案中设下标为奇的反列个数为x,下表为偶的个数为y。

先不考虑翻转问题,将奇列和偶列分开考虑(因为在处理奇列的时候只会翻转却不会影响偶列的具体数值)。由于如果初始矩阵操作后变为矩阵a,则矩阵a一定能变为初始矩阵,我们按照列的权值从小到大将矩阵a恢复为初始矩阵。处理奇列时,每翻转一次,就会翻转一个偶列,偶列也是同样道理。我们计算出奇列、偶列被翻转次数的奇偶性,与x、y比较即可。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,a[][];
int need_swap[],real_swap[];
int num[],id[];
int tree[];
void add(int _id,int x){for(;_id<=n;_id+=_id&-_id) tree[_id]+=x;}
int query(int _id){int re=;for(;_id;_id-=_id&-_id) re+=tree[_id];return re;}
int main()
{
scanf("%d",&n);
for (int j=;j<;j++)
for (int i=;i<=n;i++)
scanf("%d",&a[j][i]);
for (int i=;i<=n;i++)
for (int j=;j<;j++)
{
if ((a[][i]^i)&) { printf("No");return ;}
if (a[][i]==a[][i]+&&a[][i]==a[][i]+&&a[][i]%!=)
{
need_swap[i&]++;num[i]=a[][i]/+;id[num[i]]=i;continue;
}
if (a[][i]==a[][i]-&&a[][i]==a[][i]-&&a[][i]%!=)
{
num[i]=a[][i]/+;id[num[i]]=i;continue;
}
printf("No");return ;
}
int cnt;
for (int i=;i<=n;i+=)
{
cnt=id[i]+*(i/-query(id[i]));
real_swap[]+=abs(i-cnt)/;
add(id[i],);
}
memset(tree,,sizeof(tree));
for (int i=;i<=n;i+=)
{
cnt=id[i]+*(i/--query(id[i]));
real_swap[]+=abs(i-cnt)/;
add(id[i],);
}
real_swap[]%=;real_swap[]%=;need_swap[]%=;need_swap[]%=;
if (real_swap[]!=need_swap[]||real_swap[]!=need_swap[]) printf("No");
else printf("Yes");
}

最新文章

  1. Consul-template的简单应用:配置中心,服务发现与健康监测
  2. [WCF编程]9.性能与限流
  3. 学习SAP HANA SQL
  4. JS学习之事件流
  5. android gridview几个重要属性(android:listSelector自带内部padding分析)
  6. java.sql.SQLException: 对只转发结果集的无效操作: last
  7. JAVA基础知识之JVM-——类初始化
  8. [wikioi]数字三角形
  9. Taglib、EL、OGNL
  10. JavaScript加减计算方法和显示千分位
  11. OC版贪吃蛇
  12. Android 5.x Theme 与 ToolBar 实战
  13. ubuntu 安装kafka
  14. IDEA 控制台乱码问题
  15. POJ 3169 Layout(差分约束+链式前向星+SPFA)
  16. 安装Jenkins服务
  17. BZOJ4103 异或运算
  18. LaTeX技巧24:LaTeX常用命令集锦
  19. Mac - Hexo+GitHub轻松搭建自己的博客
  20. python基础班-淘宝-目录.txt

热门文章

  1. Python ,pickle
  2. mysql-5.5 for linux源代码安装
  3. vue2.* 环境搭建01
  4. ValueError: Invalid leaf XXX
  5. 《metasploit渗透测试魔鬼训练营》学习笔记第七章--社会工程学
  6. springboot+maven——打war包方式
  7. 【转】Maven项目模板
  8. C 标准库 中 操作 字符串 的 代码
  9. Android系统架构(一)
  10. 位图索引对于DML操作的影响