srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

yukicoder No.397 NO MORE KADOMATSU

問題

問題概要

門松列をぶち壊す。

解法

何回でも並び替えていいので、昇順または降順に並び替えてしまえば、大丈夫。バブルソートで実装した。

ミス

なし。

コード

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
using namespace std;
typedef long long ll;
typedef pair<int,int> pint;
typedef vector<int> vint;
typedef vector<pint> vpint;
#define mp make_pair
#define fi first
#define se second
#define all(v) (v).begin(),(v).end()
#define rep(i,n) for(int i=0;i<(n);i++)

int a[101];
int n;
//バブルソート
void sort(void){
    vpint ans;
    bool zerof = 1;
    bool flag = 1;
    for (int i = 0; flag; ++i){
        flag = 0;
        for (int j = n - 1; j >= i ; --j){
            if(a[j] < a[j - 1]){
                swap(a[j], a[j - 1]);
                ans.push_back(mp(j - 1, j));
                flag = 1;
                zerof = 0;
            }
        }
    }
    //変更した位置を記録しておく
    int size = ans.size(); printf("%d\n", size);
    rep(i, size) printf("%d %d\n", ans[i].fi, ans[i].se);
    return;
}
int main(void){
    cin >> n;
    rep(i, n) cin >> a[i];
    sort();
    int d; cin >> d;
    return 0;
}