結果
| 問題 | 
                            No.3317 ワロングアンサーロングアンサーンスワロンガー
                             | 
                    
| コンテスト | |
| ユーザー | 
                             tau1235
                         | 
                    
| 提出日時 | 2025-10-31 23:27:32 | 
| 言語 | C++23  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 580 ms / 2,000 ms | 
| コード長 | 1,370 bytes | 
| コンパイル時間 | 3,022 ms | 
| コンパイル使用メモリ | 291,920 KB | 
| 実行使用メモリ | 7,720 KB | 
| 最終ジャッジ日時 | 2025-11-01 10:01:58 | 
| 合計ジャッジ時間 | 19,603 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge3 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 63 | 
ソースコード
#include<bits/stdc++.h>
using namespace std;
int main(){
  using ll=long long;
  int n,q;
  string s;
  cin>>n>>q>>s;
  int top=-1;
  for (int i=0;i<n;i++){
    if (s[i]=='w'||s[i]=='a'){
      top=i;
      break;
    }
  }
  vector<pair<ll,ll>> tx(q);
  vector<vector<pair<ll,ll>>> vec(62);
  for (int i=0;i<q;i++){
    ll t,x;
    cin>>t>>x;
    tx[i]={t,x};
    if (t<60) vec[t].push_back({x,i});
  }
  auto f=[&](char c,int t){
    ll len=1;
    if (c=='w'||c=='a') len=(1LL<<t)+(1LL<<(t+2))-4;
    return len;
  };
  vector<int> pre(q,-1);
  for (int k=1;k<60;k++){
    sort(vec[k].begin(),vec[k].end());
    int j=0;
    ll sum=0;
    for (int i=0;i<n;i++){
      ll prev=sum;
      sum+=f(s[i],k);
      while (j<vec[k].size()&&sum>=vec[k][j].first){
        pre[vec[k][j].second]=i;
        tx[vec[k][j].second].second-=prev;
        j++;
      }
    }
  }
  for (int k=0;k<q;k++){
    auto [t,x]=tx[k];
    string now;
    if (t<60){
      now+=s[pre[k]];
    }
    else{
      now+=s[top];
      x-=top;
      t=60;
    }
    while (t){
      for (char c:now){
        ll len=f(c,t);
        if (x>len) x-=len;
        else{
          string next;
          next+=c;
          if (c=='w') next="warong";
          if (c=='a') next="answer";
          swap(now,next);
          break;
        }
      }
      t--;
    }
    cout<<now[x-1];
  }
  cout<<endl;
}
            
            
            
        
            
tau1235