寝癖頭の解法

小学生の目線から、勉強中の覚え書きを投稿、更新していきます。

アルゴ式(beta版): C++による「日本情報オリンピック (予選) 過去問」JOI 2020/2021 一次予選 (第 1 回)の解答例

アルゴ式(beta版)の「日本情報オリンピック (予選) 過去問」JOI 2020/2021 一次予選 (第 1 回)からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。

C++による「日本情報オリンピック (予選) 過去問」JOI 2020/2021 一次予選 (第 1 回)の解答例

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

・問題 1: 2 番目に大きい整数

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2020/2021 一次予選 (第 1 回)の解答例
問題 1: 2 番目に大きい整数
https://algo-method.com/tasks/371
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    vector<int> v(3);
    cin>>v[0]>>v[1]>>v[2];
    sort(v.begin(),v.end());
    cout<<v[1]<<endl;
    return 0;
}
・問題 2: JOI ソート

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2020/2021 一次予選 (第 1 回)の解答例
問題 2: JOI ソート
https://algo-method.com/tasks/372
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    string s;
    cin>>n>>s;
    sort(s.begin(),s.end());
    int j=0,o=0,i=0;
    for(int k=0;k<n;k++){
        if(s[k]=='J'){
            j++;
        }else if(s[k]=='O'){
            o++;
        }else{
            i++;
        }
    }
    for(int k=0;k<j;k++){
        cout<<"J";
    }
    for(int k=0;k<o;k++){
        cout<<"O";
    }
    for(int k=0;k<i;k++){
        cout<<"I";
    }
    cout<<endl;
    return 0;
}
・問題 3: 共通要素

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2020/2021 一次予選 (第 1 回)の解答例
問題 3: 共通要素
https://algo-method.com/tasks/373
提出コードの解答例
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),v;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<m;i++){
        cin>>b[i];
    }
    sort(a.begin(),a.end());
    sort(b.begin(),b.end());
    set_intersection(a.begin(),a.end(),b.begin(),b.end(),back_inserter(v));
    v.erase(unique(v.begin(),v.end()),v.end());
    for(int i=0;i<v.size();i++){
        cout<<v[i]<<endl;
    }
    return 0;
}

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

またAtCoder Problemsにも同じ問題が公開されています。

・A - 2 番目に大きい整数 (The Second Largest Integer)

atcoder.jp

・B - JOI ソート (JOI Sort)

atcoder.jp

・C - 共通要素 (Common Elements)

atcoder.jp