AtCoder Beginner Contest 134 C

C - Exception Handling

コード

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

int main() {
  int N;
  cin >> N;
  int A[N];
  int A_sort[N];
  for (int i = 0; i < N; i++) {
    cin >> A[i];
    A_sort[i] = A[i];
  }
  sort(A_sort, A_sort + N);
  for (int i = 0; i < N; i++) {
    int ret;
    if (A[i] == A_sort[N-1]) ret = A_sort[N-2];
    else ret = A_sort[N-1];
    cout << ret << endl;
  }
}

学んだこと

  • std::sortで実際にメモリ上の並び順が変わる。sort前の順番を保持しておきたければ、コピーをつくってsortすること。
  • 配列をまるごとコピーする専用の方法は特に用意されていないので、以下でやる。
    • 1要素ずつコピー。
    • memcpy関数でメモリ領域をまとめてコピー。
    • 構造体のメンバとして配列をもたせて、構造体をコピーするとメンバもコピーされる。
  • #include <bits/stdc++.h>gccで用意されており、標準ライブラリを一括includeできる。
    • が、macでこれを使うのはちょっと面倒そうなのでやめておく。