chunky77 Ответов: 1

Я получаю ошибку времени выполнения.


Вам даны два массива A и B, каждый из которых содержит N чисел. Вам нужно выбрать ровно одно число из A и ровно одно число из B таким образом, чтобы индекс двух выбранных чисел не был одинаковым, а сумма 2 выбранных значений была минимальной. Формально, если вы выбрали I-й элемент из A, значение которого равно x, и j-й элемент из B, значение которого равно y, вам нужно минимизировать значение (x+y) таким образом, чтобы i не было равно j.
Ваша задача-найти это минимальное значение.


Ввод:
Первая строка входных данных содержит целое число, обозначающее тестовые случаи, т. Первая строка каждого теста содержит целое число N, обозначающее размер двух массивов. Тогда каждая из следующих двух строк содержит N целых чисел, разделенных пробелами, обозначающих значения массива A[] и B[] соответственно.


Выход:
Выведите минимальную сумму, которая может быть получена при условиях, указанных в постановке задачи.Если это невозможно, выведите "-1" без кавычек.


Ограничения:
1<=T<=30
1<= N <=100000
1< =элементы массива < =100000

Пример:
Ввод:
1
5
5 4 3 2 1
1 2 3 4 5
Выход:
2

Объяснение:
Минимальная сумма будет получена путем выбора числа в последнем индексе первого массива, т. е. 5-го элемента первого массива(1), и первого индекса второго массива, т. е. первого элемента второго массива (1).

Сумма=1+1=2, так как их индексы различны, но сумма минимальна.

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

#include
int main()
{
int t,i,j,k,min=0;
//# of test cases
scanf("%d",&t);

struct testcase
  {
  	int sizeOfArray;
  	int a[10];
  	int b[10];
  	int ans;
  	
  };
  
 struct testcase tc[t];            //array of structures, size t 
  
  for(i=0;i<t;i++)
  {
  	scanf("%d",&tc[i].sizeOfArray);  //entering size of a and b
  	
  	 for(j=0;j<tc[i].sizeOfArray;j++)   //entering elements of a
  	 {
  	 	
  	 	scanf("%d",&(tc[i].a[j]));
	 }
  	
  	for(j=0;j<tc[i].sizeOfArray;j++)   //entering elements of b
  	 {
  	 	
  	 	scanf("%d",&tc[i].b[j]);
	 }  		
  }
  

int no=0;
for(k=0;k<t;k++)
{
	
    min=	tc[k].a[0]+tc[k].b[1];
	for(i=0;i<tc[k].sizeOfArray;i++)
	{
	 
	
		for(j=0;(j<tc[k].sizeOfArray);j++)
		 { 
		 if((tc[k].a[i]+tc[k].b[j]<min)&&(j!=i))
		 	{
		 	 
		 		min=tc[k].a[i]+tc[k].b[j];
			}
		 }
	}
	
	tc[k].ans=min;
	printf("%d\n",min);

}


return 0;
	
}



//Поскольку это дает правильные результаты в моей системе, но я получаю ошибку времени выполнения во время / / отправки этого кода

jeron1

struct testcase tc[t]; / / массив структур, размер t

Это выглядит неправильно, массив с переменным количеством записей нужно было бы создавать динамически с помощью malloc () или чего-то подобного.

1 Ответов

Рейтинг:
1

Patrice T

Цитата:
//Поскольку это дает правильные результаты в моей системе, но я получаю ошибку времени выполнения во время / / отправки этого кода
Проблема, вероятно, заключается в том, что ваше представление тестируется с более чем 10 значениями в массивах A и B.
PS: В следующий раз: попробуйте указать сообщение об ошибке.
Цитата:
Нет, я тестировал менее чем с 10 элементами, это давало мне правильные результаты, но когда я отправлял его на geeksforgeeks, он давал мне правильные результаты.
Да ты, да они!
Сколько элементов они использовали ?


chunky77

Нет, я тестировал с менее чем 10 элементами, это давало мне правильные результаты, но когда я отправляю его на geeksforgeeks, он дает мне эту ошибку-
Ошибка Времени Выполнения:
Ошибка: сброшенное ядро

chunky77

Согласно вопросу, если я использую размер массива=100000 a[100000], b[100000], то также получаю ту же ошибку.

Patrice T

Не то, что говорит ваш код.

CPallini

Мой 5.

Patrice T

Спасибо