寝癖頭の解法

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

アルゴ式(beta版): C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合

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

C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合の解答例

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

Q6-2-1. 共通する数 (A ∩ B)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合の解答例
Q6-2-1. 共通する数 (A ∩ B)
https://algo-method.com/tasks/586
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,m;
    cin>>n>>m;
    vector<int> v,a(n),b(m);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<m;i++){
        cin>>b[i];
    }
    set_intersection(a.begin(),a.end(),b.begin(),b.end(),back_inserter(v));
    sort(v.begin(),v.end());
    for(int i=0;i<(int)v.size();i++){
        cout<<v[i]<<endl;
    }
    return 0;
}
Q6-2-2. 数の合併 (A ∪ B)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合の解答例
Q6-2-2. 数の合併 (A ∪ B)
https://algo-method.com/tasks/590
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,m;
    cin>>n>>m;
    vector<int> a(n),b(m),ans;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<m;i++){
        cin>>b[i];
    }
    set_union(a.begin(),a.end(),b.begin(),b.end(),back_inserter(ans));
    for(int i=0;i<(int)ans.size();i++){
        cout<<ans[i]<<endl;
    }
    return 0;
}
Q6-2-3. 書かれた数の個数 (1)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合の解答例
Q6-2-3. 書かれた数の個数 (1)
https://algo-method.com/tasks/592
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,x;
    cin>>n>>x;
    int cnt=0;
    for(int i=1;i<=n;i++){
        if(i%x==0){
            cnt++;
        }
    }
    cout<<cnt<<endl;
    //本当は、
    //int n,x;
    //cin>>n>>x;
    //cout<<n/x<<endl;
    //という3行で終わらせられる.
    return 0;
}
Q6-2-4. 書かれた数の個数 (2)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合の解答例
Q6-2-4. 書かれた数の個数 (2)
https://algo-method.com/tasks/593
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,x,y;
    cin>>n>>x>>y;
    vector<int> a,b,ans;
    for(int i=1;i<=n;i++){
        if(i%x==0){
            a.push_back(i);
        }
        if(i%y==0){
            b.push_back(i);
        }
    }
    set_intersection(a.begin(),a.end(),b.begin(),b.end(),back_inserter(ans));
    cout<<ans.size()<<endl;
    return 0;
}
Q6-2-5. 含まれない数

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合の解答例
Q6-2-5. 含まれない数
https://algo-method.com/tasks/598
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,m;
    cin>>n>>m;
    vector<int> a(n),b(m);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<m;i++){
        cin>>b[i];
    }
    vector<int> ans;
    set_difference(a.begin(),a.end(),b.begin(),b.end(),back_inserter(ans));
    for(auto i : ans){
        cout<<i<<endl;
    }
    return 0;
}
Q6-2-6. 合併後の個数

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合の解答例
Q6-2-6. 合併後の個数
https://algo-method.com/tasks/639
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,m,k;
    cin>>n>>m>>k;
    cout<<n+m-k<<endl;
    return 0;
}
Q6-2-7. 書かれた数の個数 (3)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合の解答例
Q6-2-7. 書かれた数の個数 (3)
https://algo-method.com/tasks/640
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,x,y;
    cin>>n>>x>>y;
    vector<int> S(n),A(x),B(y),AUB,C;
    for(int i=0;i<n;i++){
        S[i]=i+1;
    }
    for(int i=0;i<x;i++){
        cin>>A[i];
    }
    for(int i=0;i<y;i++){
        cin>>B[i];
    }
    set_union(A.begin(),A.end(),B.begin(),B.end(),back_inserter(AUB));
    set_difference(S.begin(),S.end(),AUB.begin(),AUB.end(),back_inserter(C));
    cout<<C.size()<<endl;
    return 0;
}
Q6-2-8. 書かれた数の個数 (4)

algo-method.com

/*
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(2) 集合の解答例
Q6-2-8. 書かれた数の個数 (4)
https://algo-method.com/tasks/641
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    long long n;
    cin>>n;
    cout<<n-(n/3)-(n/5)+(n/15)<<endl;
    return 0;
}

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