結果
| 問題 |
No.2732 Similar Permutations
|
| コンテスト | |
| ユーザー |
hint908
|
| 提出日時 | 2024-04-19 23:01:02 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,924 bytes |
| コンパイル時間 | 2,576 ms |
| コンパイル使用メモリ | 204,876 KB |
| 最終ジャッジ日時 | 2025-02-21 05:17:15 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 1 |
| other | AC * 46 WA * 55 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using uint = unsigned int;
using ll = long long;
using ull = unsigned long long;
template<class T> using V = vector<T>;
template<class T> using VV = V<V<T>>;
template<class T> using VVV = V<VV<T>>;
template<class T> using VVVV = VV<VV<T>>;
#define rep(i,n) for(ll i=0ll;i<n;i++)
#define REP(i,a,n) for(ll i=a;i<n;i++)
const long long INF = (1LL << 60);
const long long mod99 = 998244353;
const long long mod107 = 1000000007;
const long long mod = mod99;
#define eb emplace_back
#define pb eb
#define be(v) (v).begin(),(v).end()
#define all(i,v) for(auto& i : v)
#define all2(i,j,v) for(auto& [i,j] : v)
template<class T, class U> void chmin(T& t, const U& u) { if (t > u) t = u; }
template<class T, class U> void chmax(T& t, const U& u) { if (t < u) t = u; }
// cin.tie(nullptr);
// ios::sync_with_stdio(false);
// cout << fixed << setprecision(20);
ll Rnd(ll L=0, ll R=mod99){
return rand()%(R-L)+L;
}
void solve(){
ll n;
cin >> n;
V<ll> v(n);
rep(i,n) cin >> v[i];
VV<ll> pos(200100);
rep(i, n) pos[v[i]].eb(i);
rep(i, 200100) if(pos[i].size()>=2){
V<ll> ans(n);
cout << "Yes" << endl;
rep(i, n){
cout << i+1 << " ";
ans[i] = i+1;
}
cout << endl;
swap(ans[pos[i][0]],ans[pos[i][1]]);
all(i,ans) cout << i << " ";
cout << endl;
return;
}
VV<ll> vv(32);
rep(i, n) vv[v[i]%32].eb(i);
rep(i, 32) rep(j, 32){
if(i==j) if(vv[i].size()>=2){
V<ll> ans(n, -1);
ll x = vv[i][0], y = vv[i][1];
ll a = -1, b = -1;
REP(i,1, min(n+1, 65ll)) REP(j,1,i){
ll aa = (v[x]+i)^(v[y]+j);
ll bb = (v[y]+i)^(v[x]+j);
if(aa!=bb) continue;
a = i;
b = j;
}
if(a == -1) continue;
ans[x] = a;
ans[y] = b;
ll cnt = 1;
rep(i, n) if(ans[i] == -1){
ans[i] = cnt;
cnt++;
while(a==cnt||b==cnt) cnt++;
}
rep(i, n) cout << ans[i] << " ";
cout << endl;
swap(ans[x], ans[y]);
rep(i, n) cout << ans[i] << " ";
cout << endl;
return;
}
if(i!=j) if(vv[i].size()>=1 && vv[j].size()>=1){
V<ll> ans(n, -1);
ll x = vv[i][0], y = vv[j][0];
ll a = -1, b = -1;
REP(i,1, min(n+1, 65ll)) REP(j,1,i){
ll aa = (v[x]+i)^(v[y]+j);
ll bb = (v[y]+i)^(v[x]+j);
if(aa!=bb) continue;
a = i;
b = j;
}
if(a == -1) continue;
ans[x] = a;
ans[y] = b;
ll cnt = 1;
rep(i, n) if(ans[i] == -1){
ans[i] = cnt;
cnt++;
while(a==cnt||b==cnt) cnt++;
}
rep(i, n) cout << ans[i] << " ";
cout << endl;
swap(ans[x], ans[y]);
rep(i, n) cout << ans[i] << " ";
cout << endl;
return;
}
}
cout << -1 << endl;
}
int main(){
cin.tie(nullptr);
ios::sync_with_stdio(false);
int t=1;
// cin >> t;
rep(i,t) solve();
}
hint908