ABC066-C (ARC077-A) 備忘録 p.26
itsukiです。
AtCoderの過去問を解いた様子です。解説記事ではありません。
考察の流れ
まずは愚直に書いてみる(TLE)
愚直コードに n=10, a_i = 1 2 3 4 5 6 7 8 9 10 と入力したところ、
出力は 10 8 6 4 2 1 3 5 7 9 になった
n=9, a_i = 1 2 3 4 5 6 7 8 9 と入力と、出力は 9 7 5 3 1 2 4 6 8 になった
n=偶数のとき、偶(大~小)-> 奇(小~大)という並び
n=奇数のとき、奇(大~小)-> 偶(小~大) という並びになるみたい
a_i の要素番号 i が偶数か奇数かによって、
二つの配列(例えば even[], odd[])に分けて格納し、上記の順に出力する
#include <stdio.h>
int main(){
int i, n, even[100001]={0}, odd[100001]={0};
scanf("%d",&n);
for(i=0; i<n; i++){
if(i&1){ scanf("%d", &odd[i/2]); }
else { scanf("%d", &even[i/2]); }
}
if(n&1){
for(i=(n-1)/2; i>=0; i--){ printf("%d ",even[i]); }
for(i=0; i<n/2; i++){ printf("%d ", odd[i]); }
}else{
for(i=(n-1)/2; i>=0; i--){ printf("%d ", odd[i]); }
for(i=0; i<n/2; i++){ printf("%d ",even[i]); }
}
printf("\n");
return 0;
}
まとめ
・最初はさっぱり分からなかったが、愚直解を書いたら解法が浮かんだ
(でも TLE 確信犯で投げたのは反省)
引き続き、のんびり精進します。
この記事が気に入ったらサポートをしてみませんか?