不到一个小时AK,虽然是VP的,舒服,第一次。都简单的一比,没什么可说的。

查找三阶幻方

#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
void makedata() {
    freopen("input.txt", "w", stdout);
    cout << 200000 << endl;

    for(int i = 0; i < 200000; i++) cout << 1000000000 << ' ';

    fclose(stdout);
}

int a[200][200];
bool check(int x, int y) {
    int sum = a[x][y] + a[x][y + 1] + a[x][y + 2];

    for(int i = 0; i < 3; i++) {
        if(a[x + i][y] + a[x + i][y + 1] + a[x + i][y + 2] != sum) return false;

        if(a[x][y + i] + a[x + 1][y + i] + a[x + 2][y + i] != sum) return false;

        if(a[x][y] + a[x + 1][y + 1] + a[x + 2][y + 2] != sum) return false;

        if(a[x + 2][y] + a[x + 1][y + 1] + a[x][y + 2] != sum) return false;
    }

    return true;
}
int main() {
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif
    //makedata();
    std::ios::sync_with_stdio(0), cin.tie(0);
    int n, m;
    cin >> n >> m;

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            cin >> a[i][j];
        }
    }

    int ans = 0;

    for(int i = 0; i + 2 < n; i++) {
        for(int j = 0; j + 2 < m; j++) {
            if(check(i, j)) ans++;
        }
    }

    cout << ans << endl;
    return 0;
}
View Code

相关文章: