#UVa:10152-ShellSort

將original的那疊與required的那疊兩疊從後面去做比對,找到required中的兩項第一次與original中的同樣兩項前後不一致,則從required中該項之前的都得列出來。

C++(0.116)

/*******************************************************/
/* UVa 10152 ShellSort                                 */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2012/07/22                                 */
/*******************************************************/
#include<iostream>
#include<cstdio>
using namespace std;

int main(){
  int K;
  int n, j;
  string original[205], required[205];
  while( scanf( "%d", &K ) != EOF ){
    for( int testcase = 0 ; testcase < K ; testcase++ ){
      scanf( "%d", &n );
      getchar();
      for( int i = 0 ; i < n ; i++ )
        getline( cin, original[i] );
      for( int i = 0 ; i < n ; i++ )
        getline( cin, required[i] );
      j = n-1;
      for( int i = n-1 ; i >= 0 ; j-- ){
        if( original[i] == required[j] ) i--;
        else if( original[i] != required[j] ){
          while( i >= 0 && original[i] != required[j] ) i--;
          if( i < 0 ) break;
          i--;
        }
      }
      for( ; j >= 0 ; j-- )
        printf( "%s\n", required[j].c_str() );
      printf( "\n" );
    }
  }
  return 0;
}

發表迴響