寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #ITP2_11_A ~ ITP2_11_D

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/