QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#140196 | #5413. 同构判定鸡 | Lynkcat# | 25 | 150ms | 4692kb | C++17 | 3.3kb | 2023-08-15 11:59:46 | 2024-07-04 01:43:53 |
Judging History
answer
#include<bits/stdc++.h>
#define poly vector<int>
#define ull unsigned long long
#define IOS ios::sync_with_stdio(false)
#define ll long long
#define mp make_pair
#define mt make_tuple
#define pa pair < int,int >
#define fi first
#define se second
#define inf 1e18
#define mod 998244353
#define sz(x) (int)((x).size())
#define int ll
#define N 3005
using namespace std;
int id;
int n,m;
bitset<3005>f[3005];
int col[N];
poly G[3005];
mt19937_64 gen(time(0));
void BellaKira()
{
cin>>n>>m;
for (int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
}
if (id==1)
{
cin>>n>>m;
cout<<n<<" "<<n/2*(n-n/2)<<'\n';
for (int i=1;i<=n/2;i++)
for (int j=n/2+1;j<=n;j++)
cout<<i<<" "<<j<<'\n';
return;
}
if (id==2)
{
int o,p;
cin>>o>>p;
int tot=0;
n--;
for (int i=1;i<=o;i++)
for (int j=i+1;j<=o;j++)
if (i%n!=j%n) tot++;
cout<<o<<" "<<tot<<'\n';
for (int i=1;i<=o;i++)
for (int j=i+1;j<=o;j++)
if (i%n!=j%n)
cout<<i<<" "<<j<<'\n';
return;
}
cin>>n>>m;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
f[i][j]=0;
int lst=0;
int tot=0;
int mx=0,mxtim=0;
ull seed=gen();
mt19937_64 rnd(seed);
const int B=100000000;
for (int tms=0;tms<=1000000;tms++)
{
if (id==3&&mx>=2*n)
{
mxtim=tms;
break;
}
if (tot>mx)
{
mx=tot,mxtim=tms;
}
if (lst>=B)
{
int x,y;
x=rnd()%n+1,y=rnd()%n+1;
while (x==y||!f[x][y])
x=rnd()%n+1,y=rnd()%n+1;
f[x][y]=f[y][x]=0;
G[x].erase(find(G[x].begin(),G[x].end(),y));
G[y].erase(find(G[y].begin(),G[y].end(),x));
lst=0;
tot--;
continue;
}
int x,y;
x=rnd()%n+1,y=rnd()%n+1;
while (x==y||f[x][y])
x=rnd()%n+1,y=rnd()%n+1;
for (auto u:G[y])
col[u]=1;
bool bl=1;
for (auto u:G[x])
{
for (auto v:G[u])
if (col[v]) bl=0;
}
if (bl)
{
f[x][y]=1;
f[y][x]=1;
G[x].push_back(y);
G[y].push_back(x);
tot++;
} else lst++;
for (auto u:G[y]) col[u]=0;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
f[i][j]=0;
for (int i=1;i<=n;i++) poly().swap(G[i]);
mt19937_64 rnd1(seed);
lst=0;tot=0;
for (int tms=0;tms<mxtim;tms++)
{
if (lst>=B)
{
int x,y;
x=rnd1()%n+1,y=rnd1()%n+1;
while (x==y||!f[x][y])
x=rnd1()%n+1,y=rnd1()%n+1;
f[x][y]=f[y][x]=0;
G[x].erase(find(G[x].begin(),G[x].end(),y));
G[y].erase(find(G[y].begin(),G[y].end(),x));
lst=0;
tot--;
// cout<<"Ers "<<x<<" "<<y<<endl;
continue;
}
int x,y;
x=rnd1()%n+1,y=rnd1()%n+1;
while (x==y||f[x][y])
x=rnd1()%n+1,y=rnd1()%n+1;
for (auto u:G[y])
col[u]=1;
bool bl=1;
for (auto u:G[x])
{
for (auto v:G[u])
if (col[v]) bl=0;
}
if (bl)
{
f[x][y]=1;
f[y][x]=1;
G[x].push_back(y);
G[y].push_back(x);
tot++;
} else lst++;
for (auto u:G[y]) col[u]=0;
}
tot=0;
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++)
if (f[i][j]) tot++;
cout<<n<<" "<<tot<<'\n';
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++)
if (f[i][j])
{
cout<<i<<" "<<j<<'\n';
f[i][j]=f[j][i]=0;
}
for (int i=1;i<=n;i++) poly().swap(G[i]);
}
signed main()
{
IOS;
cin.tie(0);
int T=1;cin>>T>>id;
while (T--)
{
BellaKira();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 5
Accepted
time: 3ms
memory: 3868kb
input:
10 1 3 3 1 2 1 3 2 3 33 272 3 3 1 2 1 3 2 3 28 196 3 3 1 2 1 3 2 3 92 2116 3 3 1 2 1 3 2 3 29 210 3 3 1 2 1 3 2 3 62 961 3 3 1 2 1 3 2 3 97 2352 3 3 1 2 1 3 2 3 60 900 3 3 1 2 1 3 2 3 70 1225 3 3 1 2 1 3 2 3 67 1122 3 3 1 2 1 3 2 3 67 1122
output:
33 272 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 1 25 1 26 1 27 1 28 1 29 1 30 1 31 1 32 1 33 2 17 2 18 2 19 2 20 2 21 2 22 2 23 2 24 2 25 2 26 2 27 2 28 2 29 2 30 2 31 2 32 2 33 3 17 3 18 3 19 3 20 3 21 3 22 3 23 3 24 3 25 3 26 3 27 3 28 3 29 3 30 3 31 3 32 3 33 4 17 4 18 4 19 4 20 4 21 4 22 4 23 4 2...
result:
ok correct! (10 test cases)
Test #2:
score: 10
Accepted
time: 3ms
memory: 3736kb
input:
10 2 5 10 1 2 1 3 1 4 1 5 2 3 2 4 2 5 3 4 3 5 4 5 28 293 8 28 1 2 1 3 1 4 1 5 1 6 1 7 1 8 2 3 2 4 2 5 2 6 2 7 2 8 3 4 3 5 3 6 3 7 3 8 4 5 4 6 4 7 4 8 5 6 5 7 5 8 6 7 6 8 7 8 8 26 4 6 1 2 1 3 1 4 2 3 2 4 3 4 82 2240 3 3 1 2 1 3 2 3 46 528 4 6 1 2 1 3 1 4 2 3 2 4 3 4 42 587 9 36 1 2 1 3 1 4 1 5 1 6 1 ...
output:
28 294 1 2 1 3 1 4 1 6 1 7 1 8 1 10 1 11 1 12 1 14 1 15 1 16 1 18 1 19 1 20 1 22 1 23 1 24 1 26 1 27 1 28 2 3 2 4 2 5 2 7 2 8 2 9 2 11 2 12 2 13 2 15 2 16 2 17 2 19 2 20 2 21 2 23 2 24 2 25 2 27 2 28 3 4 3 5 3 6 3 8 3 9 3 10 3 12 3 13 3 14 3 16 3 17 3 18 3 20 3 21 3 22 3 24 3 25 3 26 3 28 4 5 4 6 4 ...
result:
ok correct! (10 test cases)
Test #3:
score: 10
Accepted
time: 150ms
memory: 4692kb
input:
10 3 4 4 1 2 2 3 3 4 4 1 387 774 4 4 1 2 2 3 3 4 4 1 668 1336 4 4 1 2 2 3 3 4 4 1 1403 2806 4 4 1 2 2 3 3 4 4 1 1516 3032 4 4 1 2 2 3 3 4 4 1 1601 3202 4 4 1 2 2 3 3 4 4 1 1649 3298 4 4 1 2 2 3 3 4 4 1 1722 3444 4 4 1 2 2 3 3 4 4 1 1854 3708 4 4 1 2 2 3 3 4 4 1 1926 3852 4 4 1 2 2 3 3 4 4 1 1989 3978
output:
387 774 1 100 2 24 2 76 2 86 2 135 2 283 3 45 3 113 3 226 3 237 3 288 3 385 4 65 4 152 4 165 5 279 5 332 5 333 6 9 6 236 6 385 7 141 8 34 8 41 8 173 8 309 9 105 9 197 9 237 9 250 9 277 10 76 10 176 10 263 11 126 11 163 11 246 11 324 11 330 12 19 12 145 12 254 13 172 13 309 13 348 14 28 14 120 14 213...
result:
ok correct! (10 test cases)
Test #4:
score: 0
Time Limit Exceeded
input:
10 4 4 4 1 2 2 3 3 4 4 1 169 1014 4 4 1 2 2 3 3 4 4 1 529 5819 4 4 1 2 2 3 3 4 4 1 841 11774 4 4 1 2 2 3 3 4 4 1 961 14415 4 4 1 2 2 3 3 4 4 1 1369 24642 4 4 1 2 2 3 3 4 4 1 1681 33620 4 4 1 2 2 3 3 4 4 1 1849 38829 4 4 1 2 2 3 3 4 4 1 361 3249 4 4 1 2 2 3 3 4 4 1 289 2312 4 4 1 2 2 3 3 4 4 1 9 9
output:
result:
Test #5:
score: 0
Judgement Failed
input:
1 5 4 4 1 2 2 3 3 4 4 1 2850 24300
output:
result:
Test #6:
score: 0
Judgement Failed
input:
1 6 6 9 1 4 1 5 1 6 2 4 2 5 2 6 3 4 3 5 3 6 343 2350