アルゴ式(beta版)の「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。
C++による「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列
僕が作成、提出したコードは、以下のとおりです。
Q1. N個の値を受け取る
/* C++による「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列 Q1. N個の値を受け取る https://algo-method.com/tasks/826 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n,k; cin>>n>>k; vector<ll> a(n); for(ll i=0;i<n;i++){ cin>>a[i]; } cout<<a[k]<<endl; reverse(a.begin(),a.end()); cout<<a[k]<<endl; return 0; }
Q2. 末尾挿入クエリ
/* C++による「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列 Q2. 末尾挿入クエリ https://algo-method.com/tasks/827 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; vector<ll> a(n); for(ll i=0;i<n;i++){ cin>>a[i]; } ll q; cin>>q; for(ll i=0;i<q;i++){ ll num; cin>>num; if(num==0){ ll k; cin>>k; if(0<=k && k<a.size()){ cout<<a[k]<<endl; }else{ cout<<"Error"<<endl; } }else{ ll v; cin>>v; a.push_back(v); } } return 0; }
Q3. スタック
/* C++による「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列 Q3. スタック https://algo-method.com/tasks/828 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; vector<ll> a(n); for(ll i=0;i<n;i++){ cin>>a[i]; } ll q; cin>>q; for(ll i=0;i<q;i++){ ll num; cin>>num; if(num==0){ ll v; cin>>v; a.push_back(v); }else{ if(a.size()>0){ cout<<a.back()<<endl; a.pop_back(); }else{ cout<<"Error"<<endl; } } } return 0; }
Q4. 挿入、削除、検索
/* C++による「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列 Q4. 挿入、削除、検索 https://algo-method.com/tasks/829 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; vector<ll> a(n); for(ll i=0;i<n;i++){ cin>>a[i]; } ll q; cin>>q; for(ll i=0;i<q;i++){ ll num; cin>>num; if(num==0){ ll k,v; cin>>k>>v; a.insert(a.begin()+k,v); }else if(num==1){ ll k; cin>>k; a.erase(a.begin()+k); }else{ ll v; cin>>v; ll out=count(a.begin(),a.end(),v); cout<<out<<endl; } } return 0; }
Q5. ままこだて (1)
/* C++による「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列 Q5. ままこだて (1) https://algo-method.com/tasks/833 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; vector<ll> a(n); for(ll i=0;i<n;i++){ a[i]=i+1; } while(a.size()>1){ a.erase(a.begin()); a.push_back(a.front()); a.erase(a.begin()); } cout<<a.front()<<endl; return 0; }
Q6. 反転
/* C++による「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列 Q6. 反転 https://algo-method.com/tasks/831 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; vector<ll> a(n); for(ll i=0;i<n;i++){ cin>>a[i]; } ll q; cin>>q; for(ll i=0;i<q;i++){ ll num; cin>>num; if(num==0){ reverse(a.begin(),a.end()); }else if(num==1){ ll v; cin>>v; a.push_back(v); }else{ if(a.size()>0){ cout<<a.back()<<endl; a.pop_back(); }else{ cout<<"Error"<<endl; } } } return 0; }
Q7. 先頭への挿入
/* C++による「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列 Q7. 先頭への挿入 https://algo-method.com/tasks/832 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; vector<ll> a(n); for(ll i=0;i<n;i++){ cin>>a[i]; } reverse(a.begin(),a.end()); ll q; cin>>q; for(ll i=0;i<q;i++){ ll num; cin>>num; if(num==0){ ll v; cin>>v; a.push_back(v); }else{ if(a.size()>0){ cout<<a.back()<<endl; a.pop_back(); }else{ cout<<"Error"<<endl; } } } return 0; }
Q8. 両端への挿入
/* C++による「さまざまなデータ構造 (#毎日アルゴ式)」可変長配列 Q8. 両端への挿入 https://algo-method.com/tasks/834 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; vector<ll> a(n); for(ll i=0;i<n;i++){ cin>>a[i]; } ll q; cin>>q; vector<ll> v; for(ll i=0;i<q;i++){ ll num; cin>>num; if(num==0){ ll V; cin>>V; v.push_back(V); }else if(num==1){ ll V; cin>>V; a.push_back(V); }else{ ll k; cin>>k; if(k<v.size()){ ll ind=v.size()-1-k; cout<<v[ind]<<endl; }else{ k-=v.size(); if(k<a.size()){ cout<<a[k]<<endl; }else{ cout<<"Error"<<endl; } } } } return 0; }
設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com