AtCoder Programming Guide for beginners (APG4b)から、「第3章 競技プログラミングに役立つ知識」の提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
AtCoder Programming Guide for beginners (APG4b)
atcoder.jp
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX22. 3.02 - 2つ目の値でソート https://atcoder.jp/contests/APG4b/tasks/APG4b_ca 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; vector<int> a(n),b(n),c(n); for(int i=0;i<n;i++){ cin>>a[i]>>b[i]; c[i]=b[i]; } sort(c.begin(),c.end()); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(c[i]==b[j]){ cout<<a[j]<<" "<<b[j]<<endl; } } } return 0; }
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX23. 3.03 - 最頻値 https://atcoder.jp/contests/APG4b/tasks/APG4b_bz 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,ans0=0,ans1=0; cin>>n; vector<int> a(n); for(int i=0;i<n;i++){ cin>>a[i]; } map<int,int> mp; for(int i : a){ if(mp.count(i)){ mp[i]+=1; }else{ mp[i]=1; } } for(int i : a){ if(ans1<mp[i]){ ans1=mp[i]; ans0=i; } } cout<<ans0<<" "<<ans1<<endl; return 0; }
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX24. 3.04 - 時計の実装 https://atcoder.jp/contests/APG4b/tasks/APG4b_by 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; struct Clock{ int hour,minute,second; void set(int h,int m,int s){ hour=h; minute=m; second=s; } string to_str(void){ string HH,MM,SS; if(hour<10){ HH+="0"; } if(minute<10){ MM+="0"; } if(second<10){ SS+="0"; } HH+=to_string(hour); MM+=to_string(minute); SS+=to_string(second); return HH+":"+MM+":"+SS; } void shift(int diff_second){ int sec; sec=3600*hour+60*minute+second+diff_second; if(sec>=0){ sec%=86400; hour=sec/3600; minute=(sec-3600*hour)/60; second=sec-3600*hour-60*minute; }else{ while(sec<0){ sec+=86400; } hour=sec/3600; minute=(sec-3600*hour)/60; second=sec-3600*hour-60*minute; } } }; int main(void){ int hour,minute,second,diff_second; cin>>hour>>minute>>second>>diff_second; Clock c; c.set(hour,minute,second); cout<<c.to_str()<<endl; c.shift(diff_second); cout<<c.to_str()<<endl; }
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX25. 3.05 - 集合の操作 https://atcoder.jp/contests/APG4b/tasks/APG4b_bx 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; bitset<50> intersection(bitset<50> A,bitset<50> B){ return A&B; } bitset<50> union_set(bitset<50> A, bitset<50> B){ return A|B; } bitset<50> symmetric_diff(bitset<50> A, bitset<50> B){ return A^B; } bitset<50> subtract(bitset<50> A, int x){ return A.set(x,0); } bitset<50> increment(bitset<50> A){ if(A.test(49)){ return (A<<1).set(0); } return A<<1; } bitset<50> decrement(bitset<50> A){ if(A.test(0)){ return (A>>1).set(49); } return A>>1; } bitset<50> add(bitset<50> S,int x){ S.set(x,1); return S; } void print_set(bitset<50> S){ vector<int> cont; for(int i=0;i<50;i++){ if(S.test(i)){ cont.push_back(i); } } for(int i=0;i<cont.size();i++){ if(i>0){ cout<<" "; } cout<<cont[i]; } cout<<endl; } int main(void){ bitset<50> A,B; int N; cin>>N; for(int i=0;i<N;i++){ int x; cin>>x; A=add(A,x); } int M; cin>>M; for(int i=0;i<M;i++){ int x; cin>>x; B=add(B,x); } string com; cin>>com; if(com=="intersection"){ print_set(intersection(A,B)); }else if(com=="union_set"){ print_set(union_set(A,B)); }else if(com=="symmetric_diff"){ print_set(symmetric_diff(A,B)); }else if(com=="subtract"){ int x; cin>>x; print_set(subtract(A,x)); }else if(com=="increment"){ print_set(increment(A)); }else if(com=="decrement"){ print_set(decrement(A)); } return 0; }
/* AtCoder Programming Guide for beginners (APG4b) in C++ #EX26. 3.06 - 電卓を作ろう3 https://atcoder.jp/contests/APG4b/tasks/APG4b_bw 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; inline void print_vec(vector<int> vec){ cout<<"[ "; for(int i=0;i<vec.size();i++){ cout<<vec[i]<<" "; } cout<<"]"<<endl; } string read_name(void){ string x,y; cin>>x>>y; return x; } int read_int(map<string,int> &var_int){ string num; cin>>num; return isdigit(num[0]) ? stoi(num) : var_int[num]; } int calc_int(map<string,int> &var_int){ string sym=""; int result=0; while(sym!=";"){ int val=read_int(var_int); if(sym==""){ result=val; } if(sym=="+"){ result+=val; } if(sym=="-"){ result-=val; } cin>>sym; } return result; } vector<int> read_vec_val(map<string,int> &var_int){ vector<int> vec; string sym=""; while(sym!="]"){ int val=read_int(var_int); vec.push_back(val); cin>>sym; } return vec; } vector<int> read_vec(map<string,int> &var_int , map<string,vector<int>> &var_vec){ string val; cin>>val; return val=="[" ? read_vec_val(var_int) : var_vec.at(val); } vector<int> calc_vec(map<string,int> &var_int , map<string,vector<int>> &var_vec){ string sym; vector<int> result; while(sym!=";"){ vector<int> vec=read_vec(var_int,var_vec); if(sym==""){ result=vec; } if(sym=="+"){ for(int i=0;i<result.size();i++){ result[i]+=vec[i]; } } if(sym=="-"){ for(int i=0;i<result.size();i++){ result[i]-=vec[i]; } } cin>>sym; } return result; } int main(void){ int n; cin>>n; map<string,int> var_int; map<string,vector<int>> var_vec; for(int i=0;i<n;i++){ string s; cin>>s; if(s=="int"){ string name=read_name(); var_int[name]=calc_int(var_int); } if(s=="vec"){ string name=read_name(); var_vec[name]=calc_vec(var_int,var_vec); } if(s=="print_int"){ cout<<calc_int(var_int)<<endl; } if(s=="print_vec"){ print_vec(calc_vec(var_int,var_vec)); } } return 0; }
AtCoder Beginner Contestは、オンラインジャッジによるプログラミングコンテストです。
日本語と英語に対応していて、週末ごとに実施されているみたいです。
https://practice.contest.atcoder.jp/tutorial
アカウントを登録すれば、誰でも参加できます。