1 条题解
-
0
好一道诈骗题,被硬控一个半小时
(虽然拉着同学一起被硬控)。题意
机器人可以储存 个操作。
我们需要找到满足以前 个字符为循环节的连续子串(此子串最后一个循环节可以不完整)。思路
先考虑暴力思路:
对于每一个起点 ,向后枚举所有合法子串,如果不合法就停止(因为如果 不是一个合法子串,那么 就一定不合法)。预期得分:。 :::info[代码]
#include<bits/stdc++.h> using namespace std; int k,ans; string s; int main(){ cin >> k >> s; int n=s.size(); for(int i=0;i<n-k;i++){ int j=i+k; while(s[j]==s[i+(j-i)%k]) ans++,j++; } cout << ans; return 0; }:::
之后我跟同学就在字符串哈希的路上一路狂飙。因为有点绕,所以先给出代码。 :::success[代码]
#include<bits/stdc++.h> using namespace std; #define int long long int k,ans; string s; signed main(){ cin >> k >> s; int n=s.size(); for(int i=0;i<n-k;i++){ int j=i+k; while(s[j]==s[i+(j-i)%k]) j++; int p=j-i-k; ans+=(p+1)*p/2; i=j-k; } cout << ans; return 0; }:::
我们考虑双指针:
若 是周期为 的循环串,那么对于任意 ,其对应的子串 也完全落在该周期段内,因此它已被包含在其中,所以我们可以 一次性累加所有这些 的贡献,然后跳过它们,让 进入下一个未处理区域。
- 1
信息
- ID
- 10344
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者