Official
A - Cut Editorial
by
A - Cut Editorial
by
kyopro_friends
初心者の方へ
- プログラミングの学習を始めたばかりで何から手をつけるべきかわからない方は、まずは practice contest の問題A「Welcome to AtCoder」をお試しください。言語ごとに解答例が掲載されています。
- また、プログラミングコンテストの問題に慣れていない方は、 AtCoder Beginners Selection の問題をいくつか試すことをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
操作後の山の一番上にあるのは、もともと下から \(K\) 番目にあったカードです。下から \(K\) 番目は上から \(N-K+1\) 番目なので、操作後の山のカードには、上から順に \(A_{N-K+1},A_{N-K+2},\ldots,A_{N},A_{1},A_{2},\ldots,A_{N-K}\) が書かれています。これを出力すればよいです。
多くのプログラミング言語では、配列の添字は \(0\) から始まるため、添字に注意してください。
実装例(C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, k;
cin >> n >> k;
vector<int> a(n);
for(int i=0; i<n; i++) cin >> a[i];
for(int i=n-k; i<n; i++) cout << a[i] << ' ';
for(int i=0; i<n-k; i++) cout << a[i] << ' ';
}
実装例(Python)
N,K = map(int,input().split())
A = list(map(int,input().split()))
for i in range(N-K,N): print(A[i])
for i in range(N-K): print(A[i])
なおPython などの言語では、問題文の通りに「山を上下にわけ、下側を上に移す」という操作を以下の通り簡単に行うことができます。
実装例(Python)
N,K = map(int,input().split())
A = list(map(int,input().split()))
top = A[:-K] # 上側
bottom = A[-K:] # 下側
B = bottom + top # 下側を上に持ってくる
print(*B)
また、C++には問題文の操作そのものを行うrotateという関数があり、これを用いて解くこともできます。
実装例(C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, k;
cin >> n >> k;
vector<int> a(n);
for(int i=0; i<n; i++) cin >> a[i];
rotate(a.begin(), a.begin()+n-k, a.end());
for(int i=0; i<n; i++) cout << a[i] << ' ';
}
posted:
last update:
