torus711 のアレ

主に競技プログラミングの問題について書きます

TopCoder SRM 584, Division 2, Level 1 : TopFox

概要

二つの文字列が与えられる。
それぞれの文字列の空でないプレフィックスを s, t としたとき、s + t によって作られる文字列の総数を求めよ。

解法

実際に全通り生成して数を数えます。
部分文字列の取り出しには string::substr を使い、重複なく数える部分では set に入れて set::size をとると楽です。

コード

using namespace std;

#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i )

class TopFox
{
public:
	int possibleHandles( string familyName, string givenName )
	{
		set<string> res;
		REP( i, 0, familyName.size() )
		{
			REP( j, 0, givenName.size() )
			{
				res.insert( familyName.substr( 0, i + 1 ) + givenName.substr( 0, j + 1 ) );
			}
		}
		return res.size();
	}
}