• CF ECR59div2 D


    题目本质:如果答案是i,那么从行和列两维都会满足:以i的倍数分块,矩阵值相同。

    一种解决方法:

    1.首先题目里说了要在n的约数里找orzorz……

    2.块中需要一整排都相同。用“与前一排相同否?”来判定,而每块的第一排允许与上一排不同。复杂度还是n^2。

    1 rep(i, 2, n) {
    2         ec[i] = true;
    3         rep(j, 1, n) {
    4             if (Matrix[i][j] != Matrix[i - 1][j]) {
    5                 ec[i] = false;
    6                 break;
    7             }
    8         }
    9     }

    行和列都弄一遍以上代码。

      1 #pragma comment(linker, "/STACK:1024000000,1024000000")
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <cstdlib>
      5 #include <cmath>
      6 #include <ctime>
      7 #include <cctype>
      8 #include <climits>
      9 #include <iostream>
     10 #include <iomanip>
     11 #include <algorithm>
     12 #include <string>
     13 #include <sstream>
     14 #include <stack>
     15 #include <queue>
     16 #include <set>
     17 #include <map>
     18 #include <vector>
     19 #include <list>
     20 #include <fstream>
     21 #define ri readint()
     22 #define gc getchar()
     23 #define R(x) scanf("%d", &x)
     24 #define W(x) printf("%d
    ", x)
     25 #define init(a, b) memset(a, b, sizeof(a))
     26 #define rep(i, a, b) for (int i = a; i <= b; i++)
     27 #define irep(i, a, b) for (int i = a; i >= b; i--)
     28 #define ls p << 1
     29 #define rs p << 1 | 1
     30 using namespace std;
     31 
     32 typedef double db;
     33 typedef long long ll;
     34 typedef unsigned long long ull;
     35 typedef pair<int, int> P;
     36 const int inf = 0x3f3f3f3f;
     37 const ll INF = 1e18;
     38 
     39 inline int readint() {
     40     int x = 0, s = 1, c = gc;
     41     while (c <= 32)    c = gc;
     42     if (c == '-')    s = -1, c = gc;
     43     for (; isdigit(c); c = gc)
     44         x = x * 10 + c - 48;
     45     return x * s;
     46 }
     47 
     48 const int maxn = 5205;
     49 int n;
     50 string s;
     51 int Matrix[maxn][maxn];
     52 bool ec[maxn], er[maxn];
     53 
     54 void Deal(int i, string s) {
     55     rep(ss, 0, s.length() - 1) {
     56         int k = isdigit(s[ss]) ? s[ss] - '0' : 10 + s[ss] - 'A';
     57         rep(t, 0, 3) {
     58             Matrix[i][(ss << 2) + t + 1] = k >> (3 - t) & 1;
     59         }
     60     }
     61 }
     62 
     63 int solve() {
     64     rep(i, 2, n) {
     65         ec[i] = true;
     66         rep(j, 1, n) {
     67             if (Matrix[i][j] != Matrix[i - 1][j]) {
     68                 ec[i] = false;
     69                 break;
     70             }
     71         }
     72     }
     73     rep(j, 2, n) {
     74         er[j] = true;
     75         rep(i, 1, n) {
     76             if (Matrix[i][j] != Matrix[i][j - 1]) {
     77                 er[j] = false;
     78                 break;
     79             }    
     80         }
     81     }
     82 
     83     irep(i, n, 1) {
     84         if (n % i)    continue;
     85         bool flag = true;
     86         rep(j, 1, n) {
     87             if ((j - 1) % i != 0 && (not ec[j] || not er[j])) {
     88                 flag = false;
     89                 break;
     90             }
     91         }
     92         if (flag)    return i;
     93     }
     94 }
     95 
     96 int main() {
     97     ios_base::sync_with_stdio(false);
     98     cin.tie(0);
     99 
    100     cin >> n;
    101     rep(i, 1, n) {
    102         cin >> s;
    103         Deal(i, s);
    104     }
    105 
    106     cout << solve() << endl;
    107     return 0;
    108 }
  • 相关阅读:
    git版本控制入门
    SpringBoot入门基础:编写HelloWorld(三)
    SpringBoot入门基础:构建SpringBoot项目及启动器讲解(二)
    SpringBoot入门基础:介绍(一)
    maven入门基础:为项目分配独立的仓库实践(十七)
    maven入门基础:nexus的权限管理(十六)
    maven入门基础:使用maven部署构件到nexus(十五)
    maven入门基础:配置maven从nexus下载构件(十四)
    maven入门基础:nexus构建搜索(十三)
    事务的写法
  • 原文地址:https://www.cnblogs.com/AlphaWA/p/10462510.html
Copyright © 2020-2023  润新知