0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

0.はじめに

 前回は見逃していたため、久々のARC。1問は解きたいと思っていましたが
 なんとかAだけクリアできました。
 Bもあがいてみましたが、思い描く仕様を実装するにはスキルが足りず
 その仕様も後に解説と見比べると今一だったので、まだまだ修行が足りなそうです。
 とはいえ、去年からの緑はキープし、初のレート900台(901ですが・・・)に達しました。

1.A - Yet Another AB Problem

 単純な解き方だと穴が発生してその穴に気づかないと嵌る問題(個人の感想)。
 【考え方】
  〇基本ケースのカウント
  ・S[i]がB&T[i]の時をBA、S[i]がA、T[i]がBの時をABとする。
   ・SとTを先頭から一文字ずつ比較し、BAの個数とABの個数をカウントしていく
  →BAが1以上かつABの時、一緒に変換可能なので、別途変数PCにカウントを追加し
  BAのカウントを1減らす(ABにも加算しない)
  〇一致させることが可能かのチェック
  ・例えば以下のような場合問題の条件(i<j)より、SとTを一致させられない
    例1)変換が必要となる先頭がABのため、変換できない
     1-1.先頭がAB
      S:ABABA
     T:BBABA
     1-2.ABは先頭ではないが、ペアで変換するAが前にない
      S:BABABA
     T:BBBABA
     ※例えば以下のような場合、i=1、J=2とすれば、変換可能
      S:AABABA
     T:ABBABA
   
    例2)変換が必要となる末尾がBAのため、変換できない
     1-1.末尾がBA
      S:ABABB
     T:ABABA
     1-2.BAは末尾ではないが、ペアで変換するBが後ろにない
      S:BABABA
     T:BABAAA
    ・例1の状態チェックのため、先頭から見ていき、T[i]がAの時FAフラグに1をセット
   →AB状態かつ、FTフラグが0の場合は変換不能のため、-1を出力して終了
    ・例2の状態チェックのため、末尾から見ていき、T[i]がBの時LBフラグに1をセット
   →BA状態かつ、LBフラグが0の場合は変換不能のため、-1を出力して終了

 上記を実装し、O(2N)でAC頂けました。

 https://atcoder.jp/contests/arc170/submissions/49549016

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?