/* Когда я запускаю этот код C++, я получаю ошибку выполнения "SIGFPE" на Codechef. Как решить эту проблему?
Пояснение
Тестовый пример 1 : Оптимальное заполнение [5,0,5,0,5,0,5,0,5,0]
Тестовый пример 2 : Оптимальное заполнение [6,6,5,6,6,0,6,6]
Тестовый пример 3 : Оптимальное заполнение [2,1,2]. */
#include <bits/stdc++.h>
#include <iostream>
#include <array>
using namespace std;
int main()
{
int T;
cin >> T;
while (T--)
{
int n, m;
cin >> n >> m;
int arr[n+1];
memset(arr,0,(n+1)*sizeof(int));
int x[m], y[m];
for (int i = 0; i < m; i++)
{
cin >> x[i] >> y[i];
}
vector<pair<int, int>> myvector;
for (int i = 0; i < m; i++) {
myvector.push_back(make_pair(x[i], y[i]));
}
sort(myvector.begin(), myvector.end());
int j=0;
int i=1;
do
{
int i=1;
do
{
if (i % myvector[j].second != 0)
{
arr[i] = myvector[j].first;
}
i++;
}while (i<=n);
j++;
}while(j<m);
int sum = 0;
for (int i : arr)
{
sum += i;
}
cout << sum << endl;
}
return 0;
}
Чего вы пытаетесь достичь? Также, пожалуйста, предоставьте минимальный воспроизводимый пример.
int arr[n+1];
не соответствует стандарту C++ и является рецептом для автоматического удаления переменных в нестандартных реализациях, которые предоставляют его в качестве расширения. Аналогично дляint x[m], y[m];
Используйте векторы.SIGFPE может быть вызван делением на ноль, например, в
if (i % myvector[j].second != 0)
, еслиmyvector[j].second
равно 0. Похоже, самое время научиться пользоваться отладчиком.«SIGFPE» означает «Исключение с плавающей запятой». Вы можете запустить программу в отладчике (с включенными символами отладки), а затем ожидать, что локальные переменные изолируют проблему. Тогда, может быть, как конкретный вопрос.