日々精進

aikoと旅行とプログラミング

AtCoder Beginner Contest #59

問題A:Three-letter acronym

3つ文字列が与えられるので, それぞれの1文字目を大文字にしてつなげ表示する. 文字コードでやった.

#include <iostream>
#include <cstring>

using namespace std;

int main(){
  string s1, s2, s3;
  
  cin >> s1 >> s2 >> s3;
  cout << (char)('A'+s1[0]-'a') << (char)('A'+s2[0]-'a') << (char)('A'+s3[0]-'a') << endl;
}

問題B:Comparison

与えられる数字が {1 \leq A, B \leq 10^{100}}であるので, 文字列として受け取る. 文字列の長さで比較し, 同じ長さの場合は左から順に大きいか小さいか見ていく.

#include <iostream>
#include <cstdlib>

using namespace std;

int main(){
  string A, B;
  bool flag = true;
  cin >> A >> B;
  
  if(A.size() > B.size()){
    cout << "GREATER" << endl;
  }else if(A.size() < B.size()){
    cout << "LESS" << endl;
  }else{
    for(int i = 0 ; i <(int)A.size() ; i++){
      if((A[i]-'0') > (B[i]-'0')){
    cout << "GREATER" << endl;
    flag = false;
    break;
      }else if((A[i]-'0') < (B[i] - '0')){
    cout << "LESS" << endl;
    flag = false;
    break;
      }
    }
    if(flag) cout << "EQUAL" << endl;
  }
}

問題C:Sequence

偶数番目が正, 奇数番目が正の2通りを考え, それらの小さい方を取る. ある桁が期待した符号と異なる場合, ほしい符号の絶対値最小まで変更する(1 or -1)

#include <iostream>
#include <cmath>

using namespace std;

#define rep(i,n) REP(i,0,n)
#define REP(i,a,n) for(int i = a ; i < (int)n ; i++)

signed main(){
  long long a[100001];
  long long n;

  cin >> n;
  rep(i,n){
    cin >> a[i];
  }
  
  long long c1 = 0, c2 = 0;
  long long sum = 0;
  long long c = 1;

  // 奇数番目を正
  REP(i,0,n){
    sum += a[i];
    if(sum * c <= 0){
      c1 += (abs(sum)+1);
      sum = c;
    }
    c*=(-1);
  }
  
  // 偶数番目が正
  c = -1;
  sum = 0;
  REP(i,0,n){
    sum += a[i];
    if(sum * c <= 0){
      c2 += abs(sum)+1;
      sum = c;
    }
    c*=(-1);
  }

  cout << min(c1, c2) << endl;
}

問題D:Alice&Brown

#include <iostream>
#include <cmath>

using namespace std;

int main(){
  long long x, y;
  cin >> x >> y;
  if(abs(x-y) <= 1) cout << "Brown" << endl;
  else cout << "Alice" << endl;
}