链接:子字符串异或查询
思路:题目说
可得
题目变成从串中找到最先出现的的二进制表示,注意是次询问。原来认为是自动机类的东西,但仔细一想,数字最多位,那么字符串存在的数字数量仅为级别,那么我们可以预处理出所有数字的所在位置。
class Solution {
public:
vector<vector<int>> substringXorQueries(string s, vector<vector<int>>& queries) {
#define ll int
map<ll,pair<int,int > >S;
int sz = s.size() - 1;
for(int len=1;len<=30;++len){
for(int i=0;;++i){
if(s[i] == '0' and len != 1)continue;
if(i+len-1>sz)break;
ll now = 0;
for(int j=i;j<=i+len-1;++j){
now <<= 1;
if(s[j] == '1')now += 1ll;
}
if(S.count(now))continue;
S[now] = {i,i+len-1};
}
}
vector<vector<int> > ans;
int tot = -1;
for(auto i:queries){
ll res = (ll)i[0] ^ i[1];
if(S.count(res)){
ans.push_back({S[res].first,S[res].second});
}else {
ans.push_back({-1,-1});
}
}
return ans ;
}
};