Wyszukiwanie podciągu w danym ciągu - kod nie zostaje zaakceptowany przez sędziego SPOJ

Wyszukiwanie podciągu w danym ciągu - kod nie zostaje zaakceptowany przez sędziego SPOJ
B9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Witam,
próbuję zrobić zadnie: http://pl.spoj.com/problems/AL_13_10/ , ale mam z nim dziwny problem. Według mnie kod jest dobrze napisany, ponieważ przechodzi przez przykłady podany na stronie, ale nie przez sędziego z tej strony. Proszę o pomoc w znalezieniu błędu w tym prostym kodzie.

KOD:

Kopiuj
#include <iostream>
#include <string>

using namespace std;

int main()
{
	int n;
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		string Tmp1;
		string Tmp2;
		int Licznik = 0;
		cin >> Tmp1 >> Tmp2;

		for (int o = 0; o < Tmp1.length(); o++)
		{
			if (Tmp1[o] == Tmp2[Licznik])
			{
				if (Licznik == Tmp2.length()-1)
				{
					cout << "Tak" << endl;
					break;
				}
				Licznik++;
			}
		}
		if (Licznik != Tmp2.length()-1)
			cout << "Nie" << endl;
	}

	return 0;
}

Z góry dziękuje za pomoc.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

Zobacz co ci wypisze dla

Kopiuj
1
ALO ALA

;)
Pomijasz jeden przypadek kiedy powinieneś coś wypisać a nie wypisujesz. Zobacz gdzie podbijasz licznik -> już po sprawdzeniu warunku na TAK.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Naprawdę zbyt kombinujesz:

Kopiuj
#include <cstdio>
#include <cstring>
using namespace std;

int main()
  {
   unsigned T;
   scanf("%u",&T);
   while(T--)
     {
      static char A[1001],B[1001];
      scanf(" %1000s %1000s",B,A);
      char *a=A;
      for(char *b=B;(*a)&&((b=strchr(b,*a))!=0);++a) ++b;
      printf("%s\n",*a?"Nie":"Tak");
     }
   return 0;
  }
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
1

Coś bardziej czytelnego:

Kopiuj
#include <stdio.h>
#include <string.h>
 
int main() {
   unsigned n;
   scanf("%u",&n);
 
   while(n--) {
      static char A[1001],B[1001];
      scanf(" %1000s %1000s ", A, B);
      char *a=A;
      char *b;
      for(b=B; *b && *a; ++b) {
          a = strchr(a, *b);
          if (!a)
              break;
          ++a;
      }
      puts(*b!=0?"Nie":"Tak");
   }
   return 0;
}
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
4

Przesadzacie tochę. Kod autora może i nie był optymalny, ale nie był też tak zły żeby go pisać od nowa. Kosmetycza zmiana:

Kopiuj
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    int n;
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        string Tmp1;
        string Tmp2;
        unsigned int Licznik = 0;
        cin >> Tmp1 >> Tmp2;
 
        for (unsigned int o = 0; o < Tmp1.length(); o++)
        {
            if (Tmp1[o] == Tmp2[Licznik])
            {
            	Licznik++;
            }
        }
        if (Licznik < Tmp2.length())
        	cout << "Nie" << endl;
        else
       	cout << "Tak" << endl;
    }
 
    return 0;
}
B9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Zadanie rozwiazane. Dziekuje za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.