torus711 のアレ

主に競技プログラミングの問題について書きます.PC 以外だと数式が表示されないかもしれないです

TopCoder SRM 613, Division 2, Level 1 : TaroString

問題概要

 文字列 S が与えられる。S から一種類の文字を全て削除する操作が任意回できる。文字列 "CAT" を作ることができるかどうか、求めよ。

解法

 まず、'C', 'A', 'T' のいずれでもないような文字は全て削除する必要があります。この削除後に残った文字は全て "CAT" に必要な文字なので、これ以上削除することはできません。従って、残った文字列が "CAT" であれば "Possible" 、そうでなければ "Impossible" です。

コード

#define ALL( c ) (c).begin(), (c).end()

class TaroString
{
public:
	string getAnswer( string S )
	{
		S.erase( remove_if( ALL( S ), [&]( const char c ){ return string( "CAT" ).find( c ) == string::npos; } ), S.end() );
		return S == "CAT" ? "Possible" : "Impossible";
	}
};