解题思路:
注意事项:
参考代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
int k;string s;
char c1, c2;
cin >> k >> s >> c1 >> c2;
vector<int>pc1;//存储c1的位置
int ans = 0;
for(int i = 0; i < s.size(); i ++)
{
if(s[i] == c1)
pc1.push_back(i);
if(s[i] == c2)
{
if(i - k + 1 < 0 || !pc1.size())
continue;
int l = 0, r = (int)pc1.size() - 1;
while(l < r)
{
int mid = (l + r + 1) >> 1;
if(pc1[mid] <= (i - k + 1))
l = mid;
else
r = mid - 1;
}
if(pc1[l] <= i - k + 1)
ans += (l + 1);
}
}
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
solve();
}
0.0分
4 人评分
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:1401 |
C语言训练-自守数问题 (C语言代码) long long浏览:1067 |
C二级辅导-等差数列 (C语言代码)浏览:1217 |
时间转换 (Java代码)浏览:575 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)for循环浏览:1131 |
【回文数(二)】 (C语言代码)浏览:731 |
C语言程序设计教程(第三版)课后习题5.7 (Java代码)浏览:889 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:672 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:660 |
1017题解浏览:605 |