Submission details
Task:DNA sequence
Sender:guq2
Submission time:2016-10-22 14:18:53 +0300
Language:C++
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'void search(std::string&, std::string&)':
input/code.cpp:44:24: error: 'memset' was not declared in this scope
  memset(z, 0, sizeof(z));
                        ^
input/code.cpp:50:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(z[i]==query.length()){
                         ^

Code

#include <iostream>
#include <string>
using namespace std;
 
//  Fills Z array for given string str[]
void getZarr(string str, int Z[])
{
    int n = str.length();
    int L, R, k;
 
    L = R = 0;
    for (int i = 1; i < n; ++i)
    {
        if (i > R)
        {
            L = R = i;
            while (R<n && str[R-L] == str[R])
                R++;
            Z[i] = R-L;
            R--;
        }
        else
        {
            k = i-L;
            if (Z[k] < R-i+1)
                 Z[i] = Z[k];
            else
            {
                L = i;
                while (R<n && str[R-L] == str[R])
                    R++;
                Z[i] = R-L;
                R--;
            }
        }
    }
}

void search(string &seq, string &query){
	string concat = query + "$" + seq;
	int len = concat.length();

	int z[len]; // z array
	memset(z, 0, sizeof(z));
	// Z algorithm
	getZarr(concat, z);
	int flag = 0;
	for (int i = 0; i < len; ++i)
	{
		if(z[i]==query.length()){
			cout<<"YES"<<endl;
			flag=1;
			break;
		}
	}
	if (flag==0)
	{
		cout<<"NO"<<endl;
	}
}


int main(int argc, char const *argv[])
{
	int q;
	string seq, query;
	while(cin>>seq){
		cin>>q;
		while(q--){
			cin>>query;
			search(seq, query);
		}
	}

	return 0;
}