• 【枚举】AtCoder Regular Contest 095 C


    题意:给你一个H*W的字符矩阵,一次操作可以任意将两行或者两列交换。问你是否能通过任意多次操作,使得其变为对称矩阵。对称的含义是:对于任何格子A(i,j),其都等于A(H-i+1,W-j+1)。

    显然,先换行还是列不影响结果,不妨假设先换行再换列。

    行不必真换,只需找出哪些行成对即可,然后这些对的顺序无关,这样的方案数只有1*3*5*7*...*n,只有10000左右。

    这个怎么枚举呢,假设行数是1,2,3,4,5,6,

    那么就(1,2)-(3,4)-(5,6)

         -(3,5)-(4,6)

         -(3,6)-(4,5)

       (1,3)-(2,4)-(5,6)

         -(2,5)-(4,6)

         -(2,6)-(4,5)

       (1,4)-(2,3)-(5,6)

         -(2,5)-(3,6)

         -(2,6)-(3,5)

       (1,5)-(2,3)-(4,6)

         -(2,4)-(3,6)

         -(2,6)-(3,4)

       (1,6)-(2,3)-(4,5)

         -(2,4)-(3,5)

         -(2,5)-(3,4)

    就每次枚举一对后,下一对(x,y)的x一定选上次空出来的第一个位子,y去枚举其他位子即可。

    行数如果是奇数 类似,最后会剩下一个。

    这样枚举完行,再去check列,假设列数为偶数,则每次对于一列,找是否有与其的逆序相等的列,如果有 则配对成功。最后看看是否都能配对成功。

    如果列数是奇数,还必须有一列单独的回文列放在(W+1)/2列的位子。

  • 相关阅读:
    计算器程序
    输入三个整数,输出最大数和最小数
    输入三个数a,b,c,要示按由小到大的顺序输出
    最短路
    luogu P3953 逛公园
    二分图匹配
    luogu P3231 消毒
    [bzoj2120] [洛谷P1903] 数颜色
    [bzoj2038] [洛谷P1494] [2009国家集训队] 小Z的袜子(hose)
    [洛谷P4012] [网络流24题] 深海机器人问题
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/8837951.html
Copyright © 2020-2023  润新知