結果
問題 | No.517 壊れたアクセサリー |
ユーザー |
|
提出日時 | 2017-05-28 22:22:55 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 2,056 bytes |
コンパイル時間 | 1,781 ms |
コンパイル使用メモリ | 168,864 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-21 15:35:07 |
合計ジャッジ時間 | 2,456 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 15 |
ソースコード
#include <bits/stdc++.h>using namespace std;namespace{int N;int M;char A[ 27 ][ 27 ];char B[ 27 ][ 27 ];char S[ 300 ];int SearchA( int &iPos, const char C ){int i;for( i = 0; i < N; i++ ){iPos = 0;while( A[ i ][ iPos ] != '\0' ){if( A[ i ][ iPos ] == C ){return i;}iPos++;}}return - 1;}int SearchB( int &iPos, const char C ){int i;for( i = 0; i < M; i++ ){iPos = 0;while( B[ i ][ iPos ] != '\0' ){if( B[ i ][ iPos ] == C ){return i;}iPos++;}}return - 1;}int SetSet( char *X, const char *Y ){int i;i = 0;while( Y[ i ] != 0 ){X[ i ] = Y[ i ];i++;}return i;}} // namespaceint main( int argc, char *argv[] ){int i;int j;int k;int iStart;int iEnd;int iLen;int iNum;int iPos;int iFlag;ios::sync_with_stdio( false );cin.tie( 0 );cin >> N;iLen = 0;for( i = 0; i < N; i++ ){cin >> A[ i ];iLen += strlen( A[ i ] );}cin >> M;j = 0;for( i = 0; i < M; i++ ){cin >> B[ i ];j += strlen( B[ i ] );}// Debugif( j != iLen ){cout << "Err" << endl;return 0;}iFlag = 0;iNum = 0;iStart = 100;iEnd = 100 + strlen( A[ iNum ] );strcpy( S + iStart, A[ iNum ] );j = SearchB( iPos, S[ iStart ] );while( j >= 0 && iPos > 0 ){iStart -= iPos;SetSet( S + iStart, B[ j ] );j = SearchA( iPos, S[ iStart ] );if( j < 0 || iPos <= 0 ) break;iStart -= iPos;SetSet( S + iStart, A[ j ] );j = SearchB( iPos, S[ iStart ] );}j = SearchB( iPos, S[ iEnd - 1 ] );while( j >= 0 ){k = strlen( B[ j ] );if( k <= 1 || iPos >= k - 1 ) break;strcpy( S + iEnd - iPos - 1, B[ j ] );iEnd += k - iPos - 1;j = SearchA( iPos, S[ iEnd - 1 ] );k = strlen( A[ j ] );if( j < 0 || k <= 1 || iPos >= k - 1 ) break;strcpy( S + iEnd - iPos - 1, A[ j ] );iEnd += k - iPos - 1;j = SearchB( iPos, S[ iEnd - 1 ] );}S[ iEnd ] = '\0';if( iEnd - iStart == iLen )cout << S + iStart << endl;elsecout << - 1 << endl;return 0;}