寝癖頭の解法

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

アルゴ式(beta版): C++,Pythonによる「ビット演算 (9 章:集合演算)」- Q7. 共通部分と和集合

アルゴ式(beta版)の「ビット演算 (9 章:集合演算)」からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。

C++による「ビット演算 (9 章:集合演算)」- Q7. 共通部分と和集合


僕が作成、提出したコードは、以下のとおりです。

Q7. 共通部分と和集合

algo-method.com
C++:1回目の提出コード

/*
アルゴ式(beta版):C++による「ビット演算(9章)」- Q7. 共通部分と和集合
Q7. 共通部分と和集合
https://algo-method.com/tasks/1080
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n,x,y;
    cin>>n>>x>>y;
    vector<ll> v;ll c=0;
    while(x>0){
        if(x%2){
            v.push_back(c);
        }
        x/=2;
        c++;
    }
    vector<ll> w;c=0;
    while(y>0){
        if(y%2){
            w.push_back(c);
        }
        y/=2;
        c++;
    }
    vector<ll> vec;ll a1=0;
    set_intersection(v.begin(),v.end(),w.begin(),w.end(),inserter(vec,vec.end()));
    for(ll i=0;i<vec.size();i++){
        a1+=powl(2,vec[i]);
    }
    vector<ll> vec2;ll a2=0;
    set_union(v.begin(),v.end(),w.begin(),w.end(),inserter(vec2,vec2.end()));
    for(ll i=0;i<vec2.size();i++){
        a2+=powl(2,vec2[i]);
    }
    cout<<a1<<" "<<a2<<"\n";
    return 0;
}

C++:超改良版の提出コード

/*
アルゴ式(beta版):C++による「ビット演算(9章)」- Q7. 共通部分と和集合
Q7. 共通部分と和集合
https://algo-method.com/tasks/1080
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n,x,y;
    cin>>n>>x>>y;
    cout<<(x&y)<<" "<<(x|y)<<endl;
    return 0;
}

Python:提出コード

'''
アルゴ式(beta版):C++による「ビット演算(9章)」- Q7. 共通部分と和集合
Q7. 共通部分と和集合
https://algo-method.com/tasks/1080
提出コードの解答例
https://neguse-atama.hatenablog.com
'''
n,x,y=map(int,input().split())
print(x&y,x|y)

設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com