B. Chris and Magic Square
// Problem: B. Chris and Magic Square// Contest: Codeforces - Codeforces Round #369 (Div. 2)// URL: Memory Limit: 256 MB// Time Limit: 2000 ms// 2022-03-15 22:16:04// // Powered by CP Editor (namespace std;#define rep(i,l,r) for(int i=(l);i<=(r);i++)#define per(i,l,r) for(int i=(l);i>=(r);i--)#define ll long long#define mset(s,t) memset(s,t,sizeof(t))#define mcpy(s,t) memcpy(s,t,sizeof(t))#define fi first#define se second#define pb push_back#define all(x) (x).begin(),(x).end()#define SZ(x) ((int)(x).size())#define mp make_pairtypedef pair pii;typedef pair pll;typedef vector vi;   typedef vector Vll;               typedef vector > vpii;typedef vector > vpll;                        const ll mod = 1e9 + 7;//const ll mod = 998244353;const double pi  = acos(-1.0);inline ll qmi (ll a, ll b) {    ll ans = 1;    while (b) {        if (b & 1) ans = ans * a%mod;        a = a * a %mod;        b >>= 1;    }    return ans;}inline int read () {    int x = 0, f = 0;    char ch = getchar();    while (!isdigit(ch)) f |= (ch=='-'),ch= getchar();    while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();    return f?-x:x;}template void print(T x) {    if (x < 0) putchar('-'), x = -x;    if (x >= 10) print(x/10);    putchar(x % 10 + '0');}inline ll sub (ll a, ll b) {    return ((a - b ) %mod + mod) %mod;}inline ll add (ll a, ll b) {    return (a + b) %mod;}inline ll inv (ll a) {    return qmi(a, mod - 2);}#define int long longint n;ll a[1000][1000];void solve() {    cin >> n;    int x = -1, y = -1;    for (int i = 1; i <= n; i ++) {        for (int j = 1; j <= n; j ++)        {            cin >> a[i][j];            if(!a[i][j]) x = i, y = j;        }    }    if (n == 1) {        cout << 1 << endl;        return;    }    ll sum = 0;    for (int i = 1; i <= n; i ++) {        if (x != i) {            for (int j = 1; j <= n; j ++) {                sum += a[i][j];            }            break;        }    }        for (int j = 1; j <= n; j ++)    {        if (x == j) {            continue;        }        int e= 0;        for (int i = 1; i <= n; i ++) {            e += a[j][i];        }        if (e != sum) {            puts("-1");            return;        }    }    for (int j = 1; j <= n; j ++)    {        if (y == j) continue;         int e= 0;        for (int i = 1; i <= n; i ++) {                e += a[i][j];        }        if (e != sum) {            puts("-1");            return;        }    }        if (x + y != n + 1) {        int each = 0;        for (int i = 1; i <= n; i ++)            each += a[i][n - i + 1];        if (sum != each) {            puts("-1");            return;        }    }    if (x != y) {        int each  =0;        for (int i = 1; i <= n; i ++)            each += a[i][i];        if (each != sum) {            puts("-1");            return;        }    }            if (x + y == n + 1 && x == y) {        ll r1 = 0, l1 = 0, cc = 0, cc2 = 0;        for (int i = 1; i <= n; i ++)            l1 += a[x][i];        for (int i = 1;  i<= n; i ++)            r1 += a[i][y];        for (int i = 1; i <= n; i ++)            cc += a[i][n - i + 1];        for (int i = 1; i <= n; i ++)            cc2 += a[i][i];        if (r1 == l1 && l1 == cc && cc == cc2 && sum > r1) {            cout << sum - r1 << endl;        }        else puts("-1");        return;    }    (1, n), (2, n - 1)    if (x + y == n +1) {        ll r1 = 0, l1 = 0, cc = 0;        for (int i = 1; i <= n; i ++)            l1 += a[x][i];        for (int i = 1;  i<= n; i ++)            r1 += a[i][y];        for (int i = 1; i <= n; i ++)            cc += a[i][n - i + 1];        if (r1 == l1 && l1 == cc && sum > r1) {            cout << sum - r1 << endl;        }        else puts("-1");    }    else if (x == y) {        ll r1 = 0, l1 = 0, cc = 0;        for (int i = 1; i <= n; i ++)            l1 += a[x][i];        for (int i = 1;  i<= n; i ++)            r1 += a[i][y];        for (int i = 1; i <= n; i ++)            cc += a[i][i];        if (r1 == l1 && l1 == cc && sum > r1) {            cout << sum - r1 << endl;        }        else puts("-1");    }    else {        ll r1 = 0, l1 = 0;        for (int i = 1; i <= n; i ++)            l1 += a[x][i];        for (int i = 1;  i<= n; i ++)            r1 += a[i][y];                if (l1 != r1 || sum <= r1) {            puts("-1");            return;        }                cout << sum - l1 << endl;    }}signed main () {    // ios::sync_with_stdio(0),cin.tie(0), cout.tie(0);    int t;    t =1;    //cin >> t;    while (t --) solve();    return 0;}
题意:在0的地方放一个数,使得每行每列以及对角线相等 模拟即可(写了好多行。好菜啊)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。