【ABC過去問演習】茶色埋め 1 日目

解いた問題

  • ABC 159 の D 問題
  • ABC 165 の D 問題
  • ABC 158 の D 問題
  • ABC 154 の D 問題

ABC 158 D 問題の復習

問題

リンク先参照
D - String Formation

解き方

配列の反転はだいたい O(N^2) らしい(後で調べる)。また、string 型配列の先頭要素への挿入も時間がかかってしまうらしい。これは dequeue を用いることで解決できるらしい(これも後で調べる)。自分の提出したコードは string 型の先頭要素に普通に挿入しているので遅いが一応通った。

AC したコード
#include<bits/stdc++.h>
using namespace std;
using ll=int64_t;

int main(){
  string s;
  cin >>s;
  int q;cin>>q;
  int t,f;
  char c;
  int tmp=0;
  for(int i=0;i<q;i++){
    cin >>t;
    if(t==1){
      tmp++;
    }
    else{
      cin >>f;
      cin >>c;
      if((f==1&&tmp%2==0)||f==2&&tmp%2==1){
        s=c+s;
      }
      else if((f==2&&tmp%2==0)||f==1&&tmp%2==1){
        s.push_back(c);
      }
    }
  }
  int size=s.size();
  if(tmp%2==0){
    for(int i=0;i<size;i++){
      cout<<s.at(i);
    }
    cout <<endl;
  }
  else{
    for(int i=size-1;i>=0;i--){
      cout <<s.at(i);
    }
    cout <<endl;
  }
}