寝癖頭の解法

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

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

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

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

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

・問題 1: X に最も近い値

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 3 回)の解答例
問題 1: X に最も近い値
https://algo-method.com/tasks/390
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,l,r;
    cin>>n>>l>>r;
    vector<pair<int,int>> v;
    for(int i=l;i<=r;i++){
        v.push_back({abs(n-i),i});
    }
    sort(v.begin(),v.end());
    cout<<v[0].second<<endl;
    return 0;
}
・問題 2: キャピタリゼーション

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 3 回)の解答例
問題 2: キャピタリゼーション
https://algo-method.com/tasks/391
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    string s;
    cin>>n>>s;
    for(int i=0;i<n-1;i++){
        string t=s.substr(i,3);
        if(t=="joi"){
            s.replace(i,3,"JOI");
        }
    }
    cout<<s<<endl;
    return 0;
}
・問題 3: 最長昇順連続部分列

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 3 回)の解答例
問題 3: 最長昇順連続部分列
https://algo-method.com/tasks/392
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    vector<int> a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    vector<int> cnt;
    for(int i=0;i<n;i++){
        int x=a[i];
        int c=1;
        for(int j=i+1;j<n;j++){
            if(a[j]>=x){
                c++;
            }else{
                break;
            }
            x=a[j];
        }
        cnt.push_back(c);
    }
    sort(cnt.begin(),cnt.end(),greater<int>());
    cout<<cnt[0]<<endl;
    return 0;
}

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

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

・A - X に最も近い値 (The Nearest Value)

atcoder.jp

・B - キャピタリゼーション (Capitalization)

atcoder.jp

・C - 最長昇順連続部分列 (Longest Ascending Contiguous Subsequence)

atcoder.jp