Submission #1265817

#TimeUsernameProblemLanguageResultExecution timeMemory
1265817mhn_neekDabbeh (INOI20_dabbeh)C++20
25 / 100
2096 ms106632 KiB
//In the name of God
#include<bits/stdc++.h>
using namespace std;
typedef long long int lli;
typedef pair<lli,lli> pii;
typedef vector<lli> ve;
typedef vector<pii> vp;
const lli N = 5e5 + 100;
const lli mod = 1e9 + 7;
const lli INF = 1e18;
#define PB push_back
#define MP make_pair
#define fi first
#define se second
#define FOR(x,y) for(lli x = 0 ;x < y; x++)
#define FORS(x,y) for(lli x = 1 ;x <= y; x++)
#define debug(x) cerr<<(#x)<<" "<<x<<endl
#define all(x) x.begin(),x.end()

struct Trie{
	lli nxt[N][26];
	void build(){
		FOR(i,N)FOR(j,26)nxt[i][j] = -1;
	}
	lli vercnt = 1;
	void add(string s){
		lli v = 1;
		FOR(i,(lli)s.size()){
			if(nxt[v][(s[i]-'a')] == -1)
				nxt[v][(s[i]-'a')] = ++vercnt;		
			v = nxt[v][(s[i]-'a')];
		}
	}
	bool find(string s){
		lli v = 1;
		FOR(i,(lli)s.size()){
			if(nxt[v][(s[i]-'a')] == -1)return 0;
			v = nxt[v][(s[i]-'a')];
		}
		return 1;
	}
};
Trie t;
lli n,m;

lli dp[1000][1000];bool fo[1000][1000];


int main(){
	ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	t.build();
	FORS(i,n){
		string s;
		cin>>s;
		t.add(s);
	}
	string S;
	cin>>S;
	S = '#' + S;
	lli L = S.size()-1;
	FORS(l,L){
		string s = "";
		for(lli r = l;r <= L ;r ++){
			s += S[r];
			fo[l][r] = t.find(s);
		}
	}
	FORS(l,L){
		for(lli r = l; r <= L; r ++){
			dp[l][r] = INF;
			if(fo[l][r])dp[l][r] = 1;
		}
	}
	for(lli l = L; l > 0;  l --){
		for(lli r = l; r <=L; r ++){
			for(lli k = l; k < r; k ++)
				if(fo[l][k])
					dp[l][r] = min(dp[l][r],dp[k+1][r] + 1);
		}
	}
	while(m --){
		lli l,r;
		cin>>l>>r;
		l ++;
		if(dp[l][r] == INF)dp[l][r] = -1;
		cout<<dp[l][r]<<endl;
	}

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...