Round #298 A-Exam|Codeforces
Codeforces Round #298 A-Exam を解きました。
#include <bits/stdc++.h> #define REP2(i,x,n) for(int i=x; i<(n); i++) using namespace std; struct CWW{CWW(){ios::sync_with_stdio(false);cin.tie(0);}}cww; int main() { int N; cin >> N; if( N <= 2 ) { cout << 1 << endl; cout << 1 << endl; return 0; } else if( N == 3 ) { cout << 2 << endl; cout << 1 << " " << 3 << endl; return 0; } else { cout << N << endl; } for( int i = N; i >= 1; i-- ) { if( i % 2 != 0) { cout << i <<" "; } } for( int i = N; i >= 1; i-- ) { if( i % 2 == 0) { cout << i <<" "; } } cout << endl; return 0; }
与えられた1-Nまでの数が隣接しない様にprintする問題ですが(他、略)
学習的と云うか、パターンの様な感じなのでメモ。
N = 6 の場合
1 2 3 4 5 6 の偶奇をそれぞれ前後半に分けてprintします。
↓
2 4 6 1 3 5 ←隣接しない!!!
この問題に関しては隣接していなければ順番は問われないので 1 3 5 2 4 6 でも可。
(尚、Nが3以下は要別処理)
別解でこう言う書き方も(メモ)↓
cout << ( i % 2 ? 0 : N / 2 ) + 1 + i / 2 << ( i + 1 == N ? '\n' : ' ' );
(こっちの方がコード量がかなり減るし良さそうではあります...)