寝癖頭の解法

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

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

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

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

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

・問題 1: 3 つの整数

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 1 回)の解答例
問題 1: 3 つの整数
https://algo-method.com/tasks/384
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int one=0,two=0;
    for(int i=0;i<3;i++){
        int j;
        cin>>j;
        if(j==1){
            one++;
        }else{
            two++;
        }
    }
    cout<<((one>two) ? 1 : 2)<<endl;
    return 0;
}
・問題 2: 母音を数える

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 1 回)の解答例
問題 2: 母音を数える
https://algo-method.com/tasks/385
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    char c[5]={'a','i','u','e','o'};
    int n;
    string s;
    cin>>n>>s;
    bool tf=false;
    int cnt=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<5;j++){
            if(s[i]==c[j]){
                cnt++;
            }
        }
    }
    cout<<cnt<<endl;
    return 0;
}
・問題 3: マージ

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 1 回)の解答例
問題 3: マージ
https://algo-method.com/tasks/386
提出コードの解答例
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> c;
    while(1){
        if(a.empty() && b.empty()){
            break;
        }
        if(a.empty()){
            c.push_back(b[0]);
            b.erase(b.begin());
        }else if(b.empty()){
            c.push_back(a[0]);
            a.erase(a.begin());
        }else{
            if(a[0]>b[0]){
                c.push_back(b[0]);
                b.erase(b.begin());
            }else{
                c.push_back(a[0]);
                a.erase(a.begin());
            }
        }
    }
    for(int i=0;i<c.size();i++){
        cout<<c[i]<<endl;
    }
    return 0;
}

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

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

・A - 3 つの整数 (Three Integers)

atcoder.jp

・B - 母音を数える (Counting Vowels)

atcoder.jp

・C - マージ (Merge)

atcoder.jp