TakahiroNakamori

TakahiroNakamori

ナカモリタカヒロ

 
 

ABC Transform

問題

D – ABC Transform
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…

記録

解法

コード例

#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
using ll = long long;
using P = pair<int, int>;
#define rep(i, n) for(int i = 0; i < (n); ++i)
// using mint = modint998244353;
// using mint = modint1000000007;
// const int mod = 1000000007;
// const ll INF = 1LL << 62;
// const int INF = 1001001001;

ll cnt(ll n) {
  ll ans = 0;
  while(0 < n) {
    ans += n % 2;
    n /= 2;
  }
  return ans;
}

int main() {
  string S;
  cin >> S;

  vector<string> ans = {"A", "B", "C"};

  vector<int> s;
  int n = S.size();
  rep(i, n) { s.push_back(S[i] - 'A'); }

  int Q;
  cin >> Q;

  ll p1 = pow(2, 60);

  while(0 < Q) {
    ll t, k;
    cin >> t >> k;
    k--;
    ll p2 = pow(2, t);
    ll p = min(p1, p2);

    ll u = k / p;
    ll l = k % p;
    ll c = cnt(l);

    ll res = (s[u] + t + c) % 3;
    cout << ans[res] << endl;
    Q--;
  }

  return 0;
}