結果
| 問題 | No.3735 Offbeat Permutation Tree |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-19 17:29:19 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 279 ms / 2,000 ms |
| + 103µs | |
| コード長 | 3,441 bytes |
| 記録 | |
| コンパイル時間 | 2,050 ms |
| コンパイル使用メモリ | 343,820 KB |
| 実行使用メモリ | 12,312 KB |
| 最終ジャッジ日時 | 2026-09-19 17:29:34 |
| 合計ジャッジ時間 | 9,670 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge5_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 35 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
vector<array<int,2>> rot(vector<array<int,2>> G){
ll sz=G.size();
ll N=sqrt(sz+1);
vector<array<int,2>> NG;
for(int i=0;i<sz;i++){
auto [u,v]=G[i];
auto rt=[&](int u) ->int {
int uy=(u-1)/N;
int ux=(u-1)%N;
return ux*N+(N-1-uy)+1;
};
NG.push_back({rt(u),rt(v)});
}
return NG;
}
vector<array<int,2>> add(vector<array<int,2>> G){
ll sz=G.size();
int N=sqrt(sz+1);
vector<array<int,2>> NG;
for(int i=0;i<sz;i++){
auto [u,v]=G[i];
auto ad=[&](int u) ->int {
int uy=(u-1)/N;
int ux=(u-1)%N;
return uy*(N+2)+ux+1;
};
NG.push_back({ad(u),ad(v)});
}
for(int i=0;i<N;i++){
int y=N+1;
int x=i;
int u=y*(N+2)+x+1;
int v=u+1;
NG.push_back({u,v});
if(i!=N-1){
int y=N;
int x=i;
int u=y*(N+2)+x+1;
int v=u+1;
NG.push_back({u,v});
}
}
for(int i=0;i<N;i++){
int y=i;
int x=N+1;
int u=y*(N+2)+x+1;
int v=u+N+2;
NG.push_back({u,v});
if(i!=N-1){
int y=i;
int x=N;
int u=y*(N+2)+x+1;
int v=u+N+2;
NG.push_back({u,v});
}
}
auto mp=[&](int y,int x) -> int {
return y*(N+2)+x+1;
};
NG.push_back({mp(N,0),mp(N+1,0)});
NG.push_back({mp(0,N),mp(0,N+1)});
NG.push_back({mp(N-1,N-1),mp(N-1,N)});
NG.push_back({mp(N-1,N-1),mp(N,N-1)});
NG.push_back({mp(N,N),mp(N+1,N)});
NG.push_back({mp(N+1,N+1),mp(N,N+1)});
cerr<<NG.size()<<"\n";
return NG;
}
vector<array<int,2>> adod(vector<array<int,2>> G){
ll sz=G.size();
int N=sqrt(sz+1);
vector<array<int,2>> NG;
for(int i=0;i<sz;i++){
auto [u,v]=G[i];
if((u-1)%N>(v-1)%N)swap(u,v);
auto ad=[&](int u) ->int {
int uy=(u-1)/N;
int ux=(u-1)%N;
return uy*(N+1)+ux+1;
};
if((u-1)/N==N-1&&(v-1)/N==N-1&&((u-1)%N)%2==0){
}
else{
NG.push_back({ad(u),ad(v)});
}
}
for(int i=0;i<N;i++){
int y=N-1;
int x=i;
int u=y*(N+1)+x+1;
int v=u+N+1;
NG.push_back({u,v});
}
for(int i=0;i<N;i+=2){
int y=N;
int x=i;
int u=y*(N+1)+x+1;
int v=u+1;
NG.push_back({u,v});
}
for(int i=0;i<N;i++){
int y=i;
int x=N;
int u=y*(N+1)+x+1;
int v=u+N+1;
NG.push_back({u,v});
}
auto mp=[&](int y,int x) -> int {
return y*(N+1)+x+1;
};
NG.push_back({mp(0,N),mp(0,N-1)});
cerr<<NG.size()<<"\n";
return NG;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin>>N;
if(N<=3){
cout<<-1<<"\n";
return 0;
}
vector<array<int,2>> G={
{1,2},
{3,4},
{1,5},
{3,7},
{4,8},
{5,6},
{6,7},
{7,11},
{10,11},
{11,12},
{9,13},
{10,14},
{12,16},
{13,14},
{15,16}
};
for(int i=4;i+2<=N;i+=2){
G=add(G);
G=rot(G);
}
if(N%2==1){
G=adod(G);
}
for(auto [y,x]:G){
cout<<y<<" "<<x<<"\n";
}
}