Давайте проанализируем этот код и посмотрим, какие проблемы мы сможем найти. Это своего рода подсказка при проверке кода, но есть множественные проблемы в дополнение к ближайшей причине сбоя.
#include<bits/stdc++.h>
Никогда не делайте этого . Если вы видите это в примере, вы знаете, что это плохой пример, которому нужно следовать.
using namespace std;
Хорошо, мы не в заголовке, и краткость в образце кода является разумной целью .
#define int long long
О нет, зачем кому-то это делать? Первая проблема заключается в том, что замена препроцессора в любом случае запрещена для замены ключевых слов (например, int
).
Даже без этого запрета эта более поздняя строка
int pa=-1, pb=-1, ra=-1, rb=-1;
является теперь намеренно l ie, как будто вы запутываете код. Если бы вы имели в виду именно это, ничего не стоило бы просто написать long long pa ...
, и это не будет вводить в заблуждение.
//initializing all vars because blogs said uninitialized vars sometimes give unexpected result
string s="", a="", b="";
Но std::string
- это тип класса с конструктором по умолчанию, поэтому он может не быть неинициализированным (он будет инициализирован по умолчанию, и это нормально, а запись =""
- просто лишний шум).
Блоги предупреждают вас о инициализации по умолчанию не- типы классов (что оставляет их с неопределенными значениями), поэтому
bool fw = false;
по-прежнему разумно.
NB. это глобальные переменные, которые в любом случае инициализированы нулем ( cf ).
signed main()
Здесь - допустимые грани main
- вы никогда не должны ничего вводить иначе, под угрозой неопределенного поведения
int main() { ... }
int main(int argc, char *argv[]) { ... }
Далее, эти позиции строки являются (потенциально) неправильным типом и по сравнению с неправильным значением:
ra = r.find(a);
if (ra != -1) {
может быть просто
auto ra = r.find(a);
if (ra != std::string::npos) {
(вы могли бы написать std::string::size_type
вместо auto
, но я не вижу здесь большой пользы - в любом случае интерфейс, тип возврата и возвращаемые значения std::string::find
хорошо документированы).
Единственное оставшееся возражение состоит в том, что ни один из запросов now
, won
или конечных подстрок не соответствует чему-либо в вашей формулировке проблемы.