题目:https://dsa.cs.tsinghua.edu.cn/oj/problem.shtml?id=1143
代码:
#include<cstdio>
#include<cstring>
using namespace std;
char a[20000],t[20000],c;//初始化数组,注意最多2万个珠子(初始1万+插入1万)
int len=0,n,p;
int Delete(int &pos)//根据插入位置删除,注意要改变pos对应的实参所以这里用了引用
{
int p1=pos,p2=pos;//定义左右指针
char key=a[pos];
while(p1>0&&a[p1]==key)p1--;//当p1>0且p1处元素等于关键字时,p1向左移动
if(p1||a[p1]!=key)p1++;
//当p1移动到非0处或者p1处元素不等于关键字,p1向右移动1次,这样为了使p2-p1=所求珠子数
while(p2<len&&a[p2]==key)p2++;//当p2<len且p2处元素等于关键字时,p2向右移动
if(p2-p1>=3)//当有3个及以上珠子相同
{
strcpy(t,a+p2);
strcpy(a+p1,t);//将从p2开始的字符串覆盖从p1开始的字符串
len-=(p2-p1);//字符串长度减去相同珠子数
pos=p1;//覆盖完后,下一次待比较位置在p1处
r