Md Razeenuddin Mehdi Ответов: 2

Подпоследовательность с использованием одной строки


Дана строка S длиной N. Выберите целое число K и две непустые подпоследовательности A и B символов этой строки, каждая длиной K, такие, что:

>> A=B, то есть для каждого действительного i i-й символ в A совпадает с i-м символом в B.


обозначим индексы символов, используемых для построения A через a1,a2,...,aK, т. е.

A=(Sa1,Sa2,...,SaK). Аналогично обозначим индексы символов, используемых для построения B, через b1,b2,...,bK.


если обозначить число общих индексов в последовательностях a и b через M, то M+1≤K.


Каково максимальное значение K, чтобы можно было найти последовательности A и B, удовлетворяющие вышеприведенным условиям?

Ввод
первая строка входных данных содержит одно целое число T, обозначающее количество тестовых случаев. Описание тестов t следующим образом.

>>первая строка каждого тестового случая содержит одно целое число N.

&ГТ;&ГТ;вторая строка содержит строку s длины Н.

Шаблон вывода
Для каждого теста выведите одну строку, содержащую одно целое число ― максимум K, или 0, если нет решения.

Код, который я попробовал ниже, работает для любого ввода, который я даю. Но все равно всякий раз, когда я отправляю код, он показывает WA

Что я уже пробовал:

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
#define boost ios::sync_with_stdio(0); cin.tie(0) 
 
 
int findLongestRepeatingSubSeq(string s){
	int len = s.length();
	if(len<=1)return 0;
	vector<vector<int>>dp(len+1,vector<int>(len+1,0));
 
	for(int i=1;i<=len;i++){
		for(int j=1;j<=len;j++){
			if(s[i-1]==s[j-1] && i!=j){
				dp[i][j] = dp[i-1][j-1]+1;
			}else{
				dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
			}
		}
	}
 
	return dp[len][len];
}
 
int main(){
 	boost;
 	int t;
 	cin >> t;
 	while(t--)
 	{
 		int n;
 		cin >> n;
 		string str;
 		cin >> str;
 		cout << findLongestRepeatingSubSeq(str) << endl;
	 }
}



Я не знаю, что делаю не так. Так что я очень ценю любую помощь в этом вопросе

2 Ответов

Рейтинг:
1

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:
<pre lang="text">Input ожидаемый выход фактический выход
1 2 1
2 4 4
3 6 9
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:

int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "шаг вперед" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


Рейтинг:
1

Member 14684499

Попробуйте этот тестовый случай
4
4
anxa
6
ababcb
4
abcd
1
один
Выход должен быть
1
4
0
0


Utsav Nagaria

мои все эти тестовые случаи проходят, но все же это показывает ва