I've tried to figure out the reason for RTE on test case 2 but no way I got stuck. Please, if any coach can submit the solution to tell me which test case gives RTE or if anyone can offer help it will be appreciated.
#include<bits/stdc++.h>
using namespace std;
vector <int> arr[30];
vector <bool> ans;
int main()
{
freopen("mahdi.in", "r", stdin);
int t, len, mult, add, n, fir;
char fir1;
cin>>t;
for(int tt=1;tt<=t;tt++)
{
ans.erase(ans.begin(), ans.end());
for(int i=0;i<26;i++)arr[i].erase(arr[i].begin(), arr[i].end());
cin>>fir1>>len>>mult>>add;
fir = (fir1 - 97) % 26;
arr[fir].push_back(0);
for(int i=1; i<len; i++)
{
fir = (fir * mult + i * add) % 26;
arr[fir].push_back(i);
}
cin>>n;
while(n--)
{
cin>>fir1>>len>>mult>>add;
//if(fir1 < 97)cout<<"dog";
fir = (fir1 - 97) % 26;
bool check = 1;
int pos = -1;
if(arr[fir].size())
{
pos = arr[fir][0];
}
if(pos !=-1)
{
for(int i=1; i<len; i++)
{
check = 0;
fir = (fir * mult + i * add) % 26;
int s = 0, e = arr[fir].size(), mid;
if(!e) break;
while(s < e)
{
mid = s + (e-s-1)/2;
if(pos <= arr[fir][mid])
{
e = mid;
}
else if(pos > arr[fir][mid])
{
s = mid+1;
}
}
if(arr[fir][s] > pos)
{
pos = arr[fir][s];check=1;
}
/*for(int j=0; j<arr[fir].size(); j++)
{
if(arr[fir][j] > pos)
{
check = 1;
pos = arr[fir][j];
break;
}
}*/
if(!check)break;
}
}
if(pos == -1 || !check)
ans.push_back(0);
else
ans.push_back(1);
}
cout << "Case " << tt << ":\n";
for(int i=0;i<ans.size();i++)
{
if(ans[i]) cout<<"BRAVO\n";
else cout<<"REPEAT\n";
}
}
return 0;
}
Thanks in advance