IT・ビッグデータ徒然ブログ

関西でインフラ、データ基盤系のエンジニアになりたい

AtCoderに登録したら解くべき精選過去問10問の類題をC++で解いてみた(その3)

前回の続き。
ABC 081 B - Shift Onlyの類題を解きます。

ABC 068 B - Break Number

  • 指定された数値を1ずつループで処理しながら2で割り切れる数をもとめる。
  • max値とmaxカウンターを用意しておいて、そのカウンター以上割り切れる回数が多い数がでてきたら更新する。
#include <iostream>
 
using namespace std;
 
int main() {
    int i,j,input,counter;
    int max = 0;
    int maxcounter = 0;
 
    cin >> input;
 
    for(i = 1;i <= input; i++) {

        j = i;
        counter = 0;

        while(j > 1) {
        
            if(j % 2 == 0) {
                j /= 2;
                counter++;
            }else {
                break;
            }      

        }
        
        if(counter >= maxcounter) {
            max = i;
            maxcounter = counter;
        }
    }
 
    cout << max << endl;    
 
    return 0;
}

ABC 073 B - Theater

  • 団体客毎にループで処理
  • 各ループ毎の人数を足し算していって、結果を出力
#include <iostream>

using namespace std;

int main() {
    int i,j,first,last,groups,counter,num_people;
    cin >> groups;

    for(i = 1; i <= groups; i++) {
        cin >> first >> last;
        counter += last - first + 1;
    }

    cout << counter << endl;
       
    return 0;
}

ABC 072 B - OddString

  • 入力された中から奇数番の文字のみ取得
  • C++だとStringを配列としてもてるので、配列の番号で偶数番(配列は0からはじまるので)を文字列結合させる
#include <iostream>
#include <string>

using namespace std;

int main() {
    string input;
    string output = "";
    int i;
    cin >> input;

    for(i = 0; i < input.length(); i+=2) {
        output += input[i];
    }

    cout << output << endl;
       
    return 0;
}

ABC 053 B - A to Z String

  • 文字列の中からAを見つけて、そこからZまでの長さの最大値をもとめる
  • 何も考えずにAを見つけたら文字列の最後まで調べてZを見つけるなんてことをやったら時間オーバーになった
  • よく考えれば最初にAを見つけたらその後にAがきたとしてもそれが最大の長さになるわけじゃないので、見つけ次第Zまでの長さを求めた後、break文を挟んだら通った。
#include <iostream>
#include <string>

using namespace std;

int main() {
    string input;
    int i,j;
    int stringlength = 0;
    cin >> input;

    for(i = 0; i < input.length(); i++) {
 
        if(input[i] == 'A'){
            for(j = i; j < input.length(); j++) {
                if(input[j] == 'Z') {
                    stringlength = j - i + 1;
                } 
            }
            break;
        }
    }
    cout << stringlength << endl;
       
    return 0;
}