見出し画像

AtCoder Beginner Contest 171をしがむ

実はちょこちょこ「Python」で解いた問題を「C++」に書き直していたので、記録しておこうと思う。

A - αlphabet

#include <bits/stdc++.h>
using namespace std;

int main() {
   char C;
   cin >> C;
   if (isupper(C)){
       cout << 'A' << endl;
   } else {
       cout << 'a' << endl;
   }
}

「isupper()」あるんすね。ただ、「Python」なら1行なのに、「C++」11行!!その代わり、「Python」の1/5の実行速度。その速度いるんかと言われればよくわからんけど。とにかく早い。

B - Mix Juice

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
   int N, K;
   cin >> N >> K;
   vector<int> P(N);
   rep(i, N){
       cin >> P.at(i);
   }
   sort(P.begin(), P.end());
   int ans = 0;
   rep(i, K){
       ans += P.at(i);
   }
   cout << ans << endl;
}

「sort()」の指定方法が独特だなぁ。「begin」と「end」以外を指定することはあるんだろうか。

C - One Quadrillion and One Dalmatians

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
   long long N;
   cin >> N;
   string name_str;
   while (N > 0){
       N -= 1;
       name_str +=  'a' + N%26;
       N /= 26;
   }
   reverse(name_str.begin(), name_str.end());
   cout << name_str << endl;
}

「reverse()」も「sort()」と同じ指定方法。

D - Replacing

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;
using ll = long long;
using P = pair<int, int>;

int main() {
   int N;
   cin >> N;
   int MX = 100001;
   vector<int> int_list(MX);
   ll sum = 0;
   rep(i, N){
       int a;
       cin >> a; 
       int_list.at(a) += 1;
       sum += a; 
   }
   int Q;
   cin >> Q;
   rep(i, Q){
       int B, C;
       cin >> B >> C;
       sum += (C-B) * int_list.at(B);
       cout << sum << endl;
       int_list.at(C) += int_list.at(B);
       int_list.at(B) = 0;
   }
}

値の入力をリスト内包表記で受け取れないから、「for(rep)」の中で受け取ることになり、それなら一緒に処理もしたらええやんとなり、そうなると結構「Python」とは考え方が違って面白かった。



この記事が気に入ったらサポートをしてみませんか?