#include <iostream>
#include <cstdio>
using namespace std;
char ch[300010];
int n,m;
int Cal(int x,char c)
{
x-=1;
if(c == '.')
//点
{
if(ch[x]=='.')
{//点换点
ch[x] = c;
return 0;
}
else
{//点换字母
int rt = 0;
if(x-1>=0 && ch[x-1]=='.')
rt += 1;
if(x+1<n && ch[x+1]=='.')
rt += 1;
ch[x] = c;
return rt;
}
}
else if(c != '.')
{//字母
if(ch[x]!='.')
{//字母换字母无意义
ch[x] = c;
return 0;
}
else if(ch[x]=='.')
{//字母换点 左边有点少1 右边有点再少1
int rt = 0;
if(x-1>=0 && ch[x-1]=='.')
rt -= 1;
if(x+1<n && ch[x+1]=='.')
rt -=1;
ch[x] = c;
return rt;
}
}
}
int main()
{
while(cin >>n >> m)
{
getchar();
int count = 0;
gets(ch);
for(int i=0;i<n;i++)
{
if(ch[i]=='.'&&ch[i+1]=='.')
{
count +=1;
}
}
//cout << count << endl;
int x;
char ct;
for(int i=0;i<m;i++)
{
scanf("%d %c",&x,&ct);
//printf("%d %c\n",x,ct);
count += Cal(x,ct);
cout << count << endl;
}
}
}
就是给你一个字符串,问你替换其中某个字符后,需要几次修改才没有连续的点点...