AtCoder Programming Guide for beginners (APG4b)から、「第2章 複雑な計算処理の書き方」の提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
AtCoder Programming Guide for beginners (APG4b)
atcoder.jp
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX16. 2.01 - 隣り合う同じ値を探す https://atcoder.jp/contests/APG4b/tasks/APG4b_cg 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n=5; vector<int> a(n); for(int i=0;i<n;i++){ cin>>a[i]; if(i>0){ if(a[i]==a[i-1]){ cout<<"YES"<<endl; return 0; } } } cout<<"NO"<<endl; return 0; }
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX17. 2.02 - 果物屋さんでお買い物 https://atcoder.jp/contests/APG4b/tasks/APG4b_cf 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,s,count=0; cin>>n>>s; vector<int> a(n),p(n); for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<n;i++){ cin>>p[i]; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if((a[i]+p[j])==s){ ++count; } } } cout<<count<<endl; return 0; }
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX18. 2.03 - ゲーム大会 https://atcoder.jp/contests/APG4b/tasks/APG4b_ce 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,m; cin>>n>>m; //a[i],b[i]に入力 vector<int> a(m),b(m); for(int i=0;i<m;i++){ cin>>a[i]>>b[i]; } //二次元配列"game"を作り、値(o,x,-)を代入 vector<vector<char>> game(n,vector<char>(n,'-')); for(int i=0;i<m;i++){ a[i]--; b[i]--; game[a[i]][b[i]]='o'; game[b[i]][a[i]]='x'; } //"試合結果の表"を出力 for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<game[i][j]; if(j==(n-1)){ cout<<endl; }else{ cout<<" "; } } } return 0; }
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX19. 2.04 - 九九の採点 https://atcoder.jp/contests/APG4b/tasks/APG4b_cs 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int co=0,wr=0,n=9; vector<vector<int>> a(n,vector<int>(n)); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ int mul=(i+1)*(j+1); cin>>a[i][j]; if(j==8){ cout<<mul<<endl; }else{ cout<<mul<<" "; } if(a[i][j]==mul){ co+=1; }else{ wr+=1; } } } cout<<co<<endl; cout<<wr<<endl; return 0; }
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX20. 2.05 - 報告書の枚数 https://atcoder.jp/contests/APG4b/tasks/APG4b_cc 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; #define pb push_back int count_report_num(vector<vector<int>> &vec,int x){ if(vec[x].size()==0){ return 1; } int report=1; for(int i : vec[x]){ report+=count_report_num(vec,i); } return report; } int main(void){ int n; cin>>n; vector<int> p(n); for(int i=1;i<n;i++){ cin>>p[i]; } p[0]=-1; vector<vector<int>> child(n); for(int i=1;i<n;i++){ child.at(p[i]).pb(i); } for(int i=0;i<n;i++){ cout<<count_report_num(child,i)<<endl; } }
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX21. 2.06 - 計算量の見積もり https://atcoder.jp/contests/APG4b/tasks/APG4b_cb 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include <bits/stdc++.h> using namespace std; int f0(int N) { return 1; } int f1(int N, int M) { int s = 0; for (int i = 0; i < N; i++) { s++; } for (int i = 0; i < M; i++) { s++; } return s; } int f2(int N) { int s = 0; for (int i = 0; i < N; i++) { int t = N; int cnt = 0; while (t > 0) { cnt++; t /= 2; } s += cnt; } return s; } int f3(int N) { int s = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { s++; } } return s; } int f4(int N) { int s = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { s += i + j; } } return s; } int f5(int N, int M) { int s = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { s += i + j; } } return s; } int main() { int N, M; cin >> N >> M; int a0=-1,a1=-1,a2=-1,a3=-1,a4=-1, a5=-1; // 計算量が最も大きいもの1つだけコメントアウトする a0 = f0(N); a1 = f1(N, M); a2 = f2(N); a3 = f3(N); // a4 = f4(N); a5 = f5(N, M); cout << "f0: " << a0 << endl; cout << "f1: " << a1 << endl; cout << "f2: " << a2 << endl; cout << "f3: " << a3 << endl; cout << "f4: " << a4 << endl; cout << "f5: " << a5 << endl; }
AtCoder Beginner Contestは、オンラインジャッジによるプログラミングコンテストです。
日本語と英語に対応していて、週末ごとに実施されているみたいです。
https://practice.contest.atcoder.jp/tutorial
アカウントを登録すれば、誰でも参加できます。