比赛 2026.4.11 评测结果 AAAAAEEEEE
题目名称 与或和 最终得分 50
用户昵称 xuyuqing 运行时间 1.381 s
代码语言 C++ 内存使用 7.73 MiB
提交时间 2026-04-11 08:52:46
显示代码纯文本

#include <cstdio>
#include <iostream>

using namespace std;

const int N = 114;
const long long Mod = 1e9 + 7;

int n;
long long nums[N][N];
long long magicAnd[N][N][N];
long long magicOr[N][N][N];
long long resAnd;
long long resOr;

int main () {
    
    freopen ("andorsum.in", "r", stdin);
    freopen ("andorsum.out", "w", stdout);
    
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> nums[i][j];
        }
    }
    
    for (int line = 1; line <= n; line++) {
        for (int i = 1; i <= n; i++) {
            magicAnd[line][i][i] = magicOr[line][i][i] = nums[line][i];
            for (int j = i + 1; j <= n; j++) {
                magicAnd[line][i][j] = magicAnd[line][i][j - 1] & nums[line][j];
                magicOr[line][i][j] = magicOr[line][i][j - 1] | nums[line][j];
            }
        }
    }
    
    for (int l = 1; l <= n; l++) {
        for (int r = l; r <= n; r++) {
            for (int i = 1; i <= n; i++) {
                long long a = magicAnd[i][l][r];
                long long o = magicOr[i][l][r];
                resAnd = (resAnd + a) % Mod;
                resOr = (resOr + o) % Mod;
                for (int j = i + 1; j <= n; j++) {
                    a &= magicAnd[j][l][r];
                    o |= magicOr[j][l][r];
                    resAnd = (resAnd + a) % Mod;
                    resOr = (resOr + o) % Mod;
                }
            }
        }
    }
    
    cout << resAnd << ' ' << resOr << endl;
    
    return 0;
}