Description

  
​   题目链接
  
  
  

Solution

  
​   显然每一列只能一起动,乱动则无解。
  
​   对原网格按列黑白染色,显然每一列数只能在相同颜色之间交换,乱动则无解。
  
​   之后考虑构造方案。
  
​   我们需要发(shou)现(wan)出一些好用的变换:
  
​   (1)使一种颜色的相邻两列同时上下翻转。
  
​   (2)使一种颜色的相邻两列交换,不翻转它们,而翻转另一个颜色中,不在这两列中间的,一个列。由于\(n \ge 5\),我们总能实现这个操作。
  
​   统计出黑色列总共需要使用(2)交换多少次达到目标、以及需要翻转多少次(由于使用(2)不影响上下状态,直接用初始状态作比较即可),记为\(flip_0\)与\(inv_0\),同理对白色列计算\(flip_1\)与\(inv_1\)。
  
​   我们首先使用(2)逐一实现每一个\(flip_0\),每做一次\(flip_0\)的同时,\(inv_1\)也会减少一次。同理每做一次\(flip_1\),\(inv_0\)也会减少一次。
  
​   优先做完\(flip_0\)与\(flip_1\),此时\(inv\)不论是正负都没关系(负也是有意义的),只要是偶数,就可以使用(1)逐个翻转回来。重要的是此时\(inv\)必须是偶数,这意味着没操作前,当且仅当\(flip_0\)与\(inv_1\)的奇偶性相同,且\(flip_1\)与\(inv_0\)的奇偶性相同时,才有解,否则无解。
  
​   对于\(flip\)的计算,使用冒泡排序类模拟的套路,通过统计原位置右边有多少已操作的数来计算出当前实际位置,从而确定每一次冒泡的步数。
  
​   总时间复杂度\(\mathcal O (n \log_2 n)\)
  
  
  

Code

    

#include <cstdio>
using namespace std;
const int N=100005;
int n;
int a[N][3],where[N];
int inv[2],flip[2];
inline int abs(int x){return x<0?-x:x;
}
void readData(){scanf("%d",&n);for(int j=0;j<3;j++)for(int i=1;i<=n;i++) scanf("%d",&a[i][j]);
}
bool preDraw(){for(int i=1;i<=n;i++){int id=(a[i][0]-1)/3+1;if((i-id)&1) return false;where[id]=i;int x=(id-1)*3+1,y=x+1,z=y+1;if(a[i][0]==x&&a[i][1]==y&&a[i][2]==z);else if(a[i][0]==z&&a[i][1]==y&&a[i][2]==x)inv[i&1]^=1;else return false;}return true;
}
namespace BIT{//suffix sumint a[N];inline void add(int u,int x){for(;u;u-=u&-u)a[u]+=x;}inline int que(int u){int res=0;for(;u&&u<=n;u+=u&-u)res+=a[u];return res;}inline void reset(){for(int i=1;i<=n;i++)a[i]=0;}
}
void calcFlip(){for(int i=1;i<=n;i+=2){int nowpos=where[i]+BIT::que(where[i])*2;flip[1]^=(abs(i-nowpos)/2)&1;BIT::add(where[i],1);}BIT::reset();for(int i=2;i<=n;i+=2){int nowpos=where[i]+BIT::que(where[i])*2;flip[0]^=(abs(i-nowpos)/2)&1;BIT::add(where[i],1);}
}
int main(){readData();if(!preDraw()){puts("No");return 0;}calcFlip();if(inv[0]!=flip[1]||inv[1]!=flip[0])puts("No");else puts("Yes");return 0;
}

转载于:https://www.cnblogs.com/RogerDTZ/p/9487643.html

【AGC006E】 Rotate 3x3相关推荐

  1. Atcoder【AGC006E】 Rotate 3x3

    Description XFZ在北京一环内有一套房. XFZ房子的地砖呈网格状分布,是一个3∗N的网格.XFZ在买下这套房时,每个地砖上有一个数字,位置为(i,j)的地砖上的数字恰好为i+3(j−1) ...

  2. 【Leetcode】【Medium】Rotate Image

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  3. 【KGE】RotatE Knowledge Graph Embedding by Relational Rotation in Complex Space

    1. 前言 论文链接:https://openreview.net/forum?id=HkgEQnRqYQ github:https://github.com/DeepGraphLearning/Kn ...

  4. 【CF1209E】Rotate Columns【状压DP】【位运算】【贪心】

    题意:给一个N×MN \times MN×M的矩阵,可以进行任意多次操作将一列轮换,求每一行的最大值之和的最大值.多组数据. Easy VersionN≤4N \leq 4N≤4,M≤100M \le ...

  5. 【OpenCV 】Sobel 导数/Laplace 算子/Canny 边缘检测

    canny边缘检测见OpenCV [七]----边缘提取算子(图像边缘提取)--canny算法的原理及实现 1 Sobel 导数 1.1.1 原因 上面两节我们已经学习了卷积操作.一个最重要的卷积运算 ...

  6. 【bzoj1251】序列终结者(伸展树)

    [bzoj1251]序列终结者(伸展树) Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我 ...

  7. 【UIKit】UIView基础学习

    UIView基础介绍 官网文档: View programming Guide for iOS UIView Class Reference [常用属性和方法] UIKit User Interfac ...

  8. 【Keras】基于SegNet和U-Net的遥感图像语义分割

    from:[Keras]基于SegNet和U-Net的遥感图像语义分割 上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰"天空之眼".这两周数据挖掘课期末projec ...

  9. 【原创】原来你竟然是这样的Chrome?!Firefox笑而不语

    书接上文 上一篇文章<[原创]用事实说话,Firefox 的性能是 Chrome 的 2 倍,Edge 的 4 倍,IE11 的 6 倍!>,我们对比了不同浏览器下FineUIPro一个页 ...

最新文章

  1. linux memcached php 整合
  2. python学习框架图-从零搭建深度学习框架(二)用Python实现计算图和自动微分
  3. c html canvas,HTML5 canvas
  4. IIS负载均衡-Application Request Route详解第五篇:使用ARR来配置试点项目
  5. XAML实例教程系列 - 资源(Resources)
  6. 【转】功能测试的经验总结
  7. linux查看和编辑文件,查看和编辑文件(Linux的快捷键和主要命令)
  8. 欣赏多彩的计算机作品教案,三年级上信息技术教案-欣赏多彩的计算机作品(一)云南版...
  9. Android下最简单的Camera应用APP
  10. 矩阵运算中的trick
  11. javascript 函数2——对象排序
  12. java基础教程第3版_java基础教程第3版习题解答
  13. 学生激活windows,Visio等软件的正确姿势
  14. KeyMob移动广告聚合平台飙升您的移动广告收益
  15. SQL Server行列转换
  16. 结果和过程到底哪个重要?
  17. SIM300拨号上网与GPRS连接
  18. 高级职称17计算机,(高级职称计算机考试.doc
  19. 2022-2028年中国甲基三苯基溴化膦行业市场深度评估及投资潜力研究报告
  20. 汽车CAN总线系统原理、概述、设计与应用之论述章 ---- 个人自学笔记

热门文章

  1. 算法笔记4.1问题 C: EXCEL排序
  2. C语言中的for语句
  3. hadoop之mr案例
  4. 汽车后视镜反射率测定仪
  5. 2018年南京大学计算机专业录取分数线,南京大学2018年最低录取分数线.pdf
  6. ASP.NET Core MVC从入门到精通[PDF版]
  7. POJ 3366 Deli Deli 可能会
  8. 高速计数器过零问题(编码器测速应用)
  9. 股票交易高速接口可以支持两融交易账号登录吗?
  10. 银发〔2016〕302号文件,划重点