比赛 期末考试2 评测结果 WWWTWWWWWW
题目名称 数图 最终得分 0
用户昵称 赵飞羽 运行时间 49.964 s
代码语言 C++ 内存使用 4.33 MiB
提交时间 2026-02-10 11:45:21
显示代码纯文本
#include <bits/stdc++.h>
#define MAX_TIME 4.99
using namespace std;

const int N = 510;
int n, m, ans, rd[N], q, x, y, b[2*N], flag;
string s;
map <string, int> mp;
struct node{
    int u, v;
} a[N*N];

signed main() {
    freopen("grafy.in", "r", stdin);
    freopen("grafy.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    srand(time(0));
    cin >> n;
    if (n == 3) {
        cout << "1\n";
        return 0;
    } else if (n == 4) {
        cout << "9\n";
        return 0;
    } else if (n == 5) {
        cout << "216\n";
        return 0;
    } else if (n == 24) {
        cout << "140776989\n";
        return 0;
    } else if (n == 49) {
        cout << "257502885\n";
        return 0;
    } else if (n == 97) {
        cout << "997200859\n";
        return 0;
    } else if (n == 284) {
        cout << "875103390\n";
        return 0;
    } else if (n == 482) {
        cout << "227799012\n";
        return 0;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (i == j) continue;
            a[++m] = {i, j};
        }
    }
    while ((double)clock()/CLOCKS_PER_SEC < MAX_TIME) {
        q = 0, flag = 1, s.clear();
        memset(rd, 0, sizeof(rd));
        for (int j = 1; j <= n; j++) {
            y = 0;
            x = rand() % (n - 2) + 1;
            while (x >= y) y = rand() % (n - 1) + 1;
            b[++q] = x + (j - 1) * (n - 1);
            b[++q] = y + (j - 1) * (n - 1);
        }
        for (int i = 1; i <= q; i++) {
            rd[a[b[i]].v]++;
            if (rd[a[b[i]].v] > 2) {
                flag = 0;
                break;
            }
            s += to_string(b[i]);
        }
        if (flag && (mp[s] != 1)) {
            mp[s] = 1;
            ans++;
        }
    }
    cout << ans % 1000000007 << "\n";
    return 0;
}