我陷入问题Anti Blot

我在所有测试用例上执行了程序,我得到了正确的答案。

但是我仍然对spoj感到“错误答案”

我试过的

将流分解为字符串并将其存储为 vector ,所以我们可以说
我们的 vector 将有5个字符串(numstring,+,numstring,=,numstring),然后只要在字符串中找到m,我们就会检查每个字符串,我们知道
此位置的字符串是变量,需要借助其他数字字符串来计算

而且我们也可以肯定,带有数字的字符串只能在 vector 的0,2,4索引处,另外两个索引将具有+ and =
测试用例:

输入:



输出:


#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();
    }


}

最佳答案

我知道这很烦人,您的解决方案没有逻辑错误,但是您应该更仔细地阅读问题描述。它说:



所以输入是:

3

23 + 47 = machula

3247 + 5machula2 = 3749

machula13 + 75425 = 77038

注意行之间的空行。
只需将代码修复为:
// Blablabla before getline
getline(cin, str);
getline(cin, str);
stringstream split(str);
// The rest of your code

这应该可以解决问题。

关于c++ - Spoj上的防印迹系统,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54265421/

10-17 00:24