Top.Mail.Ru
Ответы
Аватар пользователя
2мес
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Помогите найти ошибку, код даёт неверный ответ на 35 тесте

Город Че
В центре города Че есть пешеходная улица — одно из самых популярных мест для прогулок жителей города. По этой улице очень приятно гулять, ведь вдоль улицы расположено n забавных памятников.

Девочке Маше из города Че нравятся два мальчика из её школы, и она никак не может сделать выбор между ними. Чтобы принять окончательное решение, она решила назначить обоим мальчикам свидание в одно и то же время. Маша хочет выбрать два памятника на пешеходной улице, около которых мальчики будут её ждать. При этом она хочет выбрать такие памятники, чтобы мальчики не увидели друг друга. Маша знает, что из-за тумана мальчики увидят друг друга только в том случае, если они будут на расстоянии не более r метров.

Маша заинтересовалась, а сколько способов есть выбрать два различных памятника для организации свиданий.

Формат входных данных
В первой строке находятся два целых числа n и r
(2⩽n⩽300 000 , 1⩽r⩽109) — количество памятников и максимальное расстояние, на котором мальчики могут увидеть друг друга.

Во второй строке заданы n положительных чисел d1 , d2 , ..., dn , где di — расстояние от i -го памятника до начала улицы. Все памятники находятся на разном расстоянии от началаулицы. Памятники приведены в порядке возрастания расстояния от начала улицы (1⩽d1<d2<...<dn⩽109).

Формат выходных данных
Выведите одно число — число способов выбрать два памятника для организации свиданий.

Пояснения к примеру
В приведённом примере Маша может выбрать памятники 1 и 4 или памятники 2 и 4.

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

12345678910111213141516171819202122232425262728293031323334353637
 #include <iostream> 
#include <vector> 
using namespace std; 
 
int main() 
{ 
	int n, r; 
	cin >> n >> r; 
 
	vector <int> a(n); 
 
	for (int i = 0; i < n; i++) 
		cin >> a[i]; 
 
	bool go = true; 
 
	int i = 0, j = 0, cnt = 0; 
 
	while (go) 
	{ 
		if (a[j] - a[i] > r) 
		{ 
			cnt += n - j; 
			++i; 
		} 
		else if (j == n - 1) 
		{ 
			go = false; 
		} 
		else 
			++j;  
 
	} 
 
	cout << cnt; 
	return 0; 
} 
Дополнен

cnt нужно было взять long long

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект
2мес
123456
 while (go)  
{  
...
  go = false;  
...
} 

Открой для себя оператор break.