| 比赛 |
期末考试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;
}