結果
| 問題 |
No.1051 PQ Permutation
|
| コンテスト | |
| ユーザー |
yukinon0808
|
| 提出日時 | 2020-05-08 23:15:46 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,285 bytes |
| コンパイル時間 | 1,722 ms |
| コンパイル使用メモリ | 178,876 KB |
| 実行使用メモリ | 14,444 KB |
| 最終ジャッジ日時 | 2024-07-05 20:01:05 |
| 合計ジャッジ時間 | 5,132 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 42 WA * 4 |
コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:5:34: warning: 'qi' may be used uninitialized [-Wmaybe-uninitialized]
5 | #define REP(i, n) for (int i=0; i<(n); ++i)
| ^
main.cpp:83:13: note: 'qi' was declared here
83 | int pi, qi;
| ^~
main.cpp:89:5: warning: 'pi' may be used uninitialized [-Wmaybe-uninitialized]
89 | if (pi < qi) {
| ^~
main.cpp:83:9: note: 'pi' was declared here
83 | int pi, qi;
| ^~
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) for (int i=0; i<(n); ++i)
#define RREP(i, n) for (int i=(int)(n)-1; i>=0; --i)
#define FOR(i, a, n) for (int i=(a); i<(n); ++i)
#define RFOR(i, a, n) for (int i=(int)(n)-1; i>=(a); --i)
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define DUMP(x) cerr<<#x<<" = "<<(x)<<endl
#define DEBUG(x) cerr<<#x<<" = "<<(x)<<" (L"<<__LINE__<<")"<<endl;
template<class T>
ostream &operator<<(ostream &os, const vector <T> &v) {
os << "[";
REP(i, SZ(v)) {
if (i) os << ", ";
os << v[i];
}
return os << "]";
}
template<class T, class U>
ostream &operator<<(ostream &os, const pair <T, U> &p) {
return os << "(" << p.first << " " << p.second << ")";
}
template<class T>
bool chmax(T &a, const T &b) {
if (a < b) {
a = b;
return true;
}
return false;
}
template<class T>
bool chmin(T &a, const T &b) {
if (b < a) {
a = b;
return true;
}
return false;
}
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using P = pair<int, int>;
using vi = vector<int>;
using vll = vector<ll>;
using vvi = vector<vi>;
using vvll = vector<vll>;
const ll MOD = 1e9 + 7;
const int INF = INT_MAX / 2;
const ll LINF = LLONG_MAX / 2;
const ld eps = 1e-9;
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
cout << fixed << setprecision(10);
// ifstream in("in.txt");
// cin.rdbuf(in.rdbuf());
int N, P, Q;
cin >> N >> P >> Q;
vi A(N);
REP(i, N) cin >> A[i];
// TODO 存在しない場合
if (!next_permutation(ALL(A))) {
cout << -1 << endl;
return 0;
}
int pi, qi;
REP(i, N) {
if (A[i] == P) pi = i;
if (A[i] == Q) qi = i;
}
if (pi < qi) {
REP(i, N) {
if (i) cout << ' ';
cout << A[i];
}
cout << endl;
return 0;
}
if (P < Q) {
int mi = N+1;
FOR(i, qi+1, N) {
if (Q < A[i]) {
chmin(mi, A[i]);
}
}
if (mi == N+1) {
cout << -1 << endl;
return 0;
}
vi ans;
REP(i, qi) ans.push_back(A[i]);
ans.push_back(mi);
set<int> st;
FOR(i, qi, N) {
if (A[i] == mi) continue;
st.insert(A[i]);
}
for (int a : st) ans.push_back(a);
REP(i, N) {
if (i) cout << ' ';
cout << ans[i];
}
cout << endl;
return 0;
}
vi ans;
REP(i, qi) {
ans.push_back(A[i]);
}
set<int> st;
FOR(i, qi, N) {
st.insert(A[i]);
}
while (st.upper_bound(Q) != st.end()) {
int a = *st.upper_bound(Q);
ans.push_back(a);
st.erase(a);
if (a == P) {
break;
}
for (auto it = st.begin(); it != st.end();) {
if (*it == Q) {
break;
}
else {
ans.push_back(*it);
it = st.erase(it);
}
}
}
for (int a : st) ans.push_back(a);
REP(i, N) {
if (i) cout << ' ';
cout << ans[i];
}
cout << endl;
return 0;
}
yukinon0808