Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
Aizu Online Judge in C++ #ITP2_11_A ~ ITP2_11_D
僕が作成、提出したコードは、以下のとおりです。
・問題 "Enumeration of Subsets I"
https://onlinejudge.u-aizu.ac.jp/problems/ITP2_11_A
/* Aizu Online Judge in C++ #ITP2_11_A : Enumeration of Subsets I https://onlinejudge.u-aizu.ac.jp/problems/ITP2_11_A 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; for(int i=0;i<1<<n;i++){ cout<<i<<":"; for(int j=0;j<n;j++){ if(i>>j&1){ cout<<" "<<j; } } cout<<endl; } return 0; }
・問題 "Enumeration of Subsets II"
https://onlinejudge.u-aizu.ac.jp/problems/ITP2_11_B
/* Aizu Online Judge in C++ #ITP2_11_B : Enumeration of Subsets II https://onlinejudge.u-aizu.ac.jp/problems/ITP2_11_B 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; int k,m=0; cin>>k; while(k--){ int b; cin>>b; m|=1<<b; } for(int i=m;i<1<<n;i=i+1|m){ cout<<i<<":"; for(int j=0;j<n;j++){ if(i>>j&1){ cout<<" "<<j; } } cout<<endl; } return 0; }
・問題 "Enumeration of Subsets III"
https://onlinejudge.u-aizu.ac.jp/problems/ITP2_11_C
/* Aizu Online Judge in C++ #ITP2_11_C : Enumeration of Subsets III https://onlinejudge.u-aizu.ac.jp/problems/ITP2_11_C 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; int k,m=0; cin>>k; while(k--){ int b; cin>>b; m|=1<<b; } for(int i=0;i<1<<n;i++){ if(i&~m){ continue; } cout<<i<<":"; for(int j=0;j<n;j++){ if(i>>j&1){ cout<<" "<<j; } } cout<<endl; } return 0; }
・問題 "Enumeration of Combinations"
https://onlinejudge.u-aizu.ac.jp/problems/ITP2_11_D
/* Aizu Online Judge in C++ #ITP2_11_D : Enumeration of Combinations https://onlinejudge.u-aizu.ac.jp/problems/ITP2_11_D 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,k; cin>>n>>k; for(int i=0;i<1<<n;i++){ if(__builtin_popcount(i)-k){ continue; } cout<<i<<":"; for(int j=0;j<n;j++){ if(i>>j&1){ cout<<" "<<j; } } cout<<endl; } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/