我陷入问题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/