寝癖頭の解法

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

Aizu Online Judge in C++ #ITP1_9_A~D(4 problems)

Aizu Online Judge(AOJ)の過去問から、C++による提出コードの解答例です。
Introduction to Programming IよりTopic # 9のAからDまでの計4問です。
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/9

Topic # 9 "String"

・ITP1_9_A : Finding a Word
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_A
・ITP1_9_B : Shuffle
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_B
・ITP1_9_C : Card Game
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_C
・ITP1_9_D : Transformation
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_D

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

・ITP1_9_A : Finding a Word
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_A

/*
ITP1_9_A : Finding a Word
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_A
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main(void){
    int i;
    int sum = 0;
    char W[11],T[1001];
    scanf("%s",W);
    for(i=0;W[i];++i){
        W[i]=tolower(W[i]);
    }
    while(1){
        scanf("%s",T);
        if(strcmp("END_OF_TEXT", T)==0){
            break;
        }
        for(i=0;T[i];++i){
            T[i] = tolower(T[i]);
        }
        if(strcmp(W,T)==0){
            ++sum;
        }
    }
    printf("%d\n",sum);
    return 0;
}

・ITP1_9_B : Shuffle
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_B

/*
ITP1_9_B : Shuffle
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_B
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    while(1){
        string str;
        cin>>str;
        if(str=="-"){
            return 0;
        }
        int i;
        cin>>i;
        vector<int> v(i);
        for(int j=0;j<i;j++){
            cin>>v[j];
            string s=str.substr(0,v[j]);
            str.erase(0,v[j]);
            int n=(int)str.size();
            str.insert(n,s);
        }
        cout<<str<<endl;
    }
}

・ITP1_9_C : Card Game
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_C

/*
ITP1_9_C : Card Game
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_C
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    int taro=0;
    int hanako=0;
    vector<string> s(n),t(n);
    for(int i=0;i<n;i++){
        cin>>s[i]>>t[i];
        if(s[i]==t[i]){
            taro+=1;
            hanako+=1;
            continue;
        }
        vector<string> v,v2;
        v.push_back(s[i]);
        v.push_back(t[i]);
        v2.push_back(s[i]);
        v2.push_back(t[i]);
        sort(v2.rbegin(),v2.rend());
        if(v[0]==v2[0]){
            taro+=3;
        }else{
            hanako+=3;
        }
    }
    cout<<taro<<" ";
    cout<<hanako<<endl;
    return 0;
}

・ITP1_9_D : Transformation
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_D

/*
ITP1_9_D : Transformation
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_D
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    string str;
    cin>>str;
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        if(s=="replace"){
            int a,b;
            string s2;
            cin>>a>>b>>s2;
            str.replace(a,b-a+1,s2);
        }else if(s=="print"){
            int a,b;
            cin>>a>>b;
            for(int i=a;i<=b;i++){
                cout<<str[i];
            }
            cout<<endl;
        }else{
            int a,b;
            cin>>a>>b;
            string sc=str.substr(a,b-a+1);
            reverse(sc.begin(),sc.end());
            str.erase(a,b-a+1);
            str.insert(a,sc);
        }
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/