1 条题解
-
-1
看数据范围,考虑 算法。基本思路如下:
以字符串 中的第 个元素为基准,螺旋式寻找与 相同的元素 。若 ,则它到 的距离为 ;若 ,则它到 的距离为 。 和 分别表示 和 里有多少个元素等于 。
搜索方式的考虑:假设 ,,则搜索顺序如下:。若 ,则搜索顺序如下:,其中第 个搜索的位置为 ,此时需要特判。设 表示已搜索的字符数,则循环结束条件为 ,注意 的初值为 。设已进行 次搜索,则 的变化规律为:
j+=(cnt%2)?(cnt+1):(-cnt-1)
循环的初值、终止条件、变化规律如下:
for(int j=i-1;t<s.size();j+=(cnt%2)?(cnt+1):(-cnt-1))
与 的增值规则如下:
cnt++;
if(j<0)continue;
t++;
根据以上信息,易得代码:(此处只展示循环部分)
for(int j=i-1;t<s.size();j+=(cnt%2)?(cnt+1):(-cnt-1)){ cnt++; if(j<0)continue; t++; if(s[j]!=ch)continue; else if(j<i&&s[j]==ch&&tot+(i-j-(lftcnt+1))<=n)lftcnt++,tot+=i-j-lftcnt; else if(j>i&&s[j]==ch&&tot+(j-i-(rgtcnt+1))<=n)rgtcnt++,tot+=j-i-rgtcnt; else if(s[j]==ch)break; }
其余请独立思考。
- 1
信息
- ID
- 641
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 23
- 已通过
- 6
- 上传者