前缀和 C++
题目:字符串查询
给你单词 SS 和 QQ 个询问。
每次询问,你会得到正整数 A,B,CA,B,C 和 DD。
我们令单词 XX 由 SS 的第 AA 到 BB 个字母组成,单词 YY 由 SS 的第 CC 到 DD 个字母组成。
你需要回答,是否能够重新排列单词 YY 中的字母,得到单词 XX。
输入格式
第一行一个单词 SS,仅由小写字母组成。
第二行一个正整数 QQ。
接下来 QQ 行,每行四个整数 A,B,C,DA,B,C,D。
输出格式
每次询问,如果能,输出 DA
,否则输出 NE
。
输入样例:
kileanimal
2
2 2 7 7
1 4 4 7
输出样例:
DA
NE
#include<iostream>
using namespace std;
#include<vector>
#include<string>
#include<algorithm>
int main()
{
string str;
int n = 0, res = 1;
cin >> str;
cin >> n;
vector<vector<int>>ans(str.size() + 1, vector<int>(26, 0));
for (size_t i = 1; i < str.size(); i++)
{
for (size_t j = 1; j < 26; j++)
{
ans[i][j] = ans[i - 1][j];
}
ans[i-1][str[i] - 'a']++;
}
while (n--)
{
res = 1;
int a, b, c, d;
cin >> a >> b >> c >> d;
for (int i = 0; i < 26; i++) {
int x = ans[a][i] - ans[b][i];
int y = ans[c][i] - ans[d][i];
if (x != y) {
res = 0;
break;
}
}
if (res) {
cout << "DA";
}
else {
cout << "NE";
}
}
return 0;
}