So in this codeforces round 685 i solved the B problem. It passed all the pretests initially.However later it showed a runtime error in the system run. Can someonehelp me with my solution?
[Problem][Problem - B - Codeforces]
Solution:
#include
#include <bits/stdc++.h>
using namespace std;
int main() {int t;
cin>>t;
while(t–)
{int n,q,i;
char str[n+1];
cin>>n>>q;
cin>>str;
while(q–)
{
int l,r,k=0;
cin>>l>>r;
for(i=0;i<=l-2;i++)
{
if(str[i]==str[l-1])
{k++;
break;}
}
for(i=r;i<=n-1;i++)
{
if(str[i]==str[r-1])
{k++;
break;}
}
if(k==0)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
}
// your code goes here
return 0;
}
I used similar approach
my code : Submission #99170194 - Codeforces
it worked for me
simplify your code a little bit. decrease l and r beforehand so that they become valid indices.
The 2nd for loop going from r to n-1 can possibly have some bugs…
1 Like
run the 2nd loop from r+1 to n-1
1 Like
You are runing for loop for every query it will increase your time complexity.
1 Like
Actually I rectified my solution since char array is not very efficient I changed it to string and the solution worked. Thank you for your idea.
Rectified the solution the problem was I was using a character array instead of string.
Well there wasn’t any bug but i used string data type instead of a character array and it was all done
1 Like
while(t--){
ll n,q;
cin>>n>>q;
string s;
cin>>s;
while(q--){
ll l,r,flag=0,i;
cin>>l>>r;
l--;
r--;
for(i=r+1;i<n;i++){
if(s[i]==s[r]){
flag=1;
}
}
for(i=0;i<=l-1;i++){
if(s[i]==s[l]){
flag=1;
}
}
if(flag==1){
cout<<"YES";
}
else{
cout<<"NO";
}
cout<<endl;
}
}
If L’th character is present before index L , OR , R’th character is present after index R then answer is “YES” else “NO”
1 Like
// #include <math.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--)
{
//ios::sync_with_stdio(false); cin.tie(0);
int n,q;
cin>>n>>q;
string s;
cin>>s;
while(q--)
{
int l,r;
cin>>l>>r;
//if(r>n)
//cout<<"no"<<endl;
if(l==r)
cout<<"no"<<endl;
else
{
string s1=s.substr(l-1,(r-l)+1);
int ans=s1.find(s[0]);
int c=0;
//cout<<s1<<" "<<ans<<endl;
int i=ans+2;
//cout<<i<<endl;
//cout<<s1<<endl;
for(int j=1; j<s1.length(); j++)
{
if (s.find(s1[j],i) != string::npos)
{
c=1;
//cout<<s1[j]<<" "<<i<<endl;
}
else
{
c=0;
break;
}
i++;
}
if(c==1)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
}
}
return 0;
}
what is wrong with my code it's says WA