kavinderrana121 Ответов: 2

Проблема ABSYS на spoj


Я застрял на одной проблеме SPOJ.com - ABSYS проблема [^]

Я выполнил свою программу на всех тестовых примерах ,я получаю правильный ответ.

Но все же я получаю как "неправильный ответ" на spoj

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

Разбивая поток на строки ,хранящие их в векторах, таким образом,мы можем сказать, что наш вектор будет иметь 5 строк (numstring,+, numstring,=, numstring), а затем мы будем проверять каждую строку всякий раз, когда мы находим m в строке, мы узнаем, что строка в этой позиции является переменной, которую нужно вычислить с помощью других цифр строки

И мы также уверены в том, что строка с цифрами может быть только при 0,2,4 индексах в векторах, другие два индекса будут иметь + и =


Сценарии тестирования:

Ввод:

3

23 + 47 = Мачула

3247 + 5machula2 = 3749

мачула13 + 75425 = 77038
Выход:

23 + 47 = 70

3247 + 502 = 3749

1613 + 75425 = 77038

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

#include<iostream>
#include<sstream>
#include<vector>
#include<string>
using namespace std;
int main() {
    int t;
    (cin >> t).get();
    while (t--) {
        string str;

        getline(cin, str);
        stringstream split(str);
        string each;
        vector <string> tokens;
        while (getline(split, each, ' ')) {
            ///scan each part of stream;
            tokens.push_back(each);

        }
        int ind = -1;
        for (int i = 0; i < tokens.size(); i++) {
            string temp;
            temp = tokens[i];
            for (int j = 0; j < temp.length(); j++) {
                if (temp[j] == 'm') {
                    ind = i;
                    break;
                }

            }
            if (ind != -1)
                break;
        }
        int i1, i2;
        string str1;
        if (ind == 0) {
            i1 = stoi(tokens[2]);
            i2 = stoi(tokens[4]);
            int result = i2 - i1;
            cout << result << " + " << i1 << " = " << i2 << "\n";
            //break;
        }
        else if (ind == 2) {
            i1 = stoi(tokens[0]);
            i2 = stoi(tokens[4]);
            int result;
            result = i2 - i1;
            cout << i1 << " + " << result << " = " << i2 << "\n";
            //break;
        }
        else if (ind == 4) {
            i1 = stoi(tokens[0]);
            i2 = stoi(tokens[2]);
            int result = i1 + i2;
            cout << i1 << " + " << i2 << " = " << result << "\n";
            //break;
        }
        tokens.clear();
        str.erase();
    }


}

Richard MacCutchan

Вы должны задать этот вопрос по адресу spoj.com.

2 Ответов

Рейтинг:
1

Patrice T

Цитата:
Но все же я получаю как "неправильный ответ" на spoj

Какой-то сайт дает журналы тестов, есть ли представление о провальном тесте ?
Цитата:
Разбивая поток на строки ,сохраняя их в векторах, мы можем сказать, что наш вектор будет иметь 5 строк (numstring,+, numstring,=,numstring)

Где вы видели, что между каждой частью уравнений есть пространство ?
Я не видел, чтобы это было написано в описании проблемы.
Ваш код не проверяет количество частей после разделения.

Вместо разделения на пробелы я бы использовал регулярное выражение для сопоставления "+" и "=" и исключения пробелов.


Рейтинг:
0

Arnav Varshney

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

Вот как бы я реализовал этот алгоритм.

Во-первых, возьмите входные данные в строке STR.
Затем разбейте строку на 3 части = NO1, NO2, ANS
Теперь проверьте в каждой строке, если она содержит строку "machula"
Разберите строку с "мачулой" как целое число и решите уравнение дальше.

Например:
Принимая образец теста 1:

Цитата:
23 + 47 = Мачула


Затем разделить ввод на 3 части:
NO1 = 23
NO2 = 47
АНС = Мачула.

Проверка каждой строки на наличие "Мачулы" исключает NO1 и NO2.

Пусть INT1, INT2 и INT3 - целочисленные значения строк.

Затем:
INT1 = 23
INT2 = 47

И мы должны найти INT3.

Примечание: Вы можете обратиться к Преобразование строк в числа в C/C++ - GeeksforGeeks[^] для преобразования строки в целое число.